首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android TabActivity 動態修改標題欄顯示當前 Tab 名稱的正確監聽器

     編輯:程式設計綜合問答

問題場景

繼承 TabActivity(已棄用),底部 Tab 切換時,希望頂部標題欄顯示當前 Tab 的標籤文字,而非固定的 App 名稱。

正確做法:setOnTabChangedListener


public class HomeScreen extends TabActivity {
    private TabHost mTabHost;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.hometabs);

        mTabHost = getTabHost();
        // ... 添加 Tab 代碼 ...

        // 關鍵:監聽 Tab 切換,更新標題
        mTabHost.setOnTabChangedListener(new TabHost.OnTabChangeListener() {
            @Override
            public void onTabChanged(String tabId) {
                // tabId 即 newTabSpec(tag) 時傳入的 tag
                setTitle(tabId); // 直接設置 Activity 標題
            }
        });
    }
}

原代碼錯誤分析


// 錯誤:重寫 onChildTitleChanged 並嘗試修改 Tab 標籤下的 TextView
public void onChildTitleChanged(Activity childActivity, CharSequence title) {
    View tabView = mTabHost.getCurrentTabView();
    TextView tv = tabView.findViewById(android.R.id.title);
    tv.setText(title); // 這會修改 Tab 標籤文字,而非頂部標題欄
}

onChildTitleChanged 回調發生在**子 Activity 標題變化時**,用於同步修改 Tab 標籤文字(反向操作)。且 getCurrentTabView() 返回的是 Tab 指示器視圖,非頂部標題欄。

現代替代:ViewPager2 + TabLayout + Toolbar


// Toolbar 作為 ActionBar
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

TabLayout tabLayout = findViewById(R.id.tabLayout);
ViewPager2 viewPager = findViewById(R.id.viewPager);

viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
    @Override
    public void onPageSelected(int position) {
        TabLayout.Tab tab = tabLayout.getTabAt(position);
        if (tab != null) {
            getSupportActionBar().setTitle(tab.getText()); // 更新 Toolbar 標題
        }
    }
});

總結

  • 舊 TabActivity:mTabHost.setOnTabChangedListener(tabId -> setTitle(tabId)) 直接搞定。
  • 不要重寫 onChildTitleChanged 去改 Tab 標籤,那是反方向同步。
  • 新項目**棄用 TabActivity**,遷移至 ViewPager2 + TabLayout + Toolbar,架構清晰、支援 Fragment、Material Design 風格。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved