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

Android TabHost 在 AppCompatActivity 中使用已棄用 API 的兼容性處理方案

     編輯:程式設計疑難解答

現狀

TabHost 及 TabActivity 自 API Level 13 (Android 3.2) 起**已棄用**,在 AppCompatActivity 中使用易出現崩潰、樣式異常、Fragment 生命周期混亂。

遷移方案:ViewPager2 + TabLayout (Material Design)


// 依賴
implementation "androidx.viewpager2:viewpager2:1.0.0"
implementation "com.google.android.material:material:1.5.0"

// 佈局
<com.google.android.material.tabs.TabLayout
    android:id="@+id/tabLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />
<androidx.viewpager2.widget.ViewPager2
    android:id="@+id/viewPager"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1" />

// Adapter
class TabAdapter(fragmentActivity: FragmentActivity) : FragmentStateAdapter(fragmentActivity) {
    override fun getItemCount() = 3
    override fun createFragment(position: Int) = when(position) {
        0 -> HomeFragment()
        1 -> DiscoverFragment()
        2 -> ProfileFragment()
    }
}

// 綁定
TabLayoutMediator(tabLayout, viewPager) { tab, position ->
    tab.text = arrayOf("首頁","發現","我的")[position]
}.attach()

優勢

  • 原生支持 Fragment 生命周期、預加載、滑動手勢。
  • Material Design 風格,支持指示器動畫、自定義 Tab 視圖。
  • 無棄用 API 風險,長期維護無憂。

若必須維護舊 TabHost 代碼

  • 使用 android.support.v4.app.FragmentTabHost(支持庫版)。
  • 在 onCreate 中初始化:tabHost.setup(this, supportFragmentManager, R.id.realtabcontent)。
  • 但強烈建議**盡快重構遷移**。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved