XML 使用 setupWithViewPager 时 TabItem 消失了
XML TabItem are gone when using setupWithViewPager
我正在尝试添加 TabItem 的表单 XML,稍后想在 java 代码中将它们与 ViewPager 连接起来。但是,一旦我调用 tab_layout.setupWithViewPager(pager)
,标签项就会变成空白。
片段代码:
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
val listOfFragment = listOf(Fragment1.newInstance(),Fragment2.newInstance(),Fragment3.newInstance())
homePagerAdapter = HomePagerAdapter(childFragmentManager, listOfFragment)
view_pager.adapter = homePagerAdapter
tab_layout.setupWithViewPager(view_pager)
}
FragmentPagerAdapter:
class HomePagerAdapter(fm: FragmentManager, private val listOfFragment: List<FragmentData>) :
FragmentPagerAdapter(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
override fun getItem(position: Int): Fragment {
return listOfFragment[position].fragment
}
override fun getCount(): Int {
return listOfFragment.size
}
}
XML:
<...>
<com.google.android.material.tabs.TabLayout
android:id="@+id/tab_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/title_appbar">
<com.google.android.material.tabs.TabItem
android:id="@+id/profile_tab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:icon="@drawable/ic_profile"
android:text="@string/profile" />
<com.google.android.material.tabs.TabItem
android:id="@+id/photos_tab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:icon="@drawable/ic_photos"
android:text="@string/photos" />
<com.google.android.material.tabs.TabItem
android:id="@+id/live_tab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:icon="@drawable/ic_live"
android:text="@string/live" />
</com.google.android.material.tabs.TabLayout>
<androidx.viewpager.widget.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tab_layout">
</androidx.viewpager.widget.ViewPager>
</...>
结果:
预计:
请注意:我很清楚实现此目的的其他几种方法,例如动态添加 TabItem 然后连接 ViewPager 并添加 tab_layout.selectTab(tab_layout.getTabAt(position))
ViewPager 的onPageSelected 回调。
但我希望在不对 java 代码进行任何修改的情况下将 XML TabItem 与 ViewPager 连接起来。提前致谢。
方法 tabLayout.setupWithViewPager()
removes all tabs 然后从适配器添加选项卡。
使用您的适配器填充 TabLayout
.
我正在尝试添加 TabItem 的表单 XML,稍后想在 java 代码中将它们与 ViewPager 连接起来。但是,一旦我调用 tab_layout.setupWithViewPager(pager)
,标签项就会变成空白。
片段代码:
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
val listOfFragment = listOf(Fragment1.newInstance(),Fragment2.newInstance(),Fragment3.newInstance())
homePagerAdapter = HomePagerAdapter(childFragmentManager, listOfFragment)
view_pager.adapter = homePagerAdapter
tab_layout.setupWithViewPager(view_pager)
}
FragmentPagerAdapter:
class HomePagerAdapter(fm: FragmentManager, private val listOfFragment: List<FragmentData>) :
FragmentPagerAdapter(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
override fun getItem(position: Int): Fragment {
return listOfFragment[position].fragment
}
override fun getCount(): Int {
return listOfFragment.size
}
}
XML:
<...>
<com.google.android.material.tabs.TabLayout
android:id="@+id/tab_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/title_appbar">
<com.google.android.material.tabs.TabItem
android:id="@+id/profile_tab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:icon="@drawable/ic_profile"
android:text="@string/profile" />
<com.google.android.material.tabs.TabItem
android:id="@+id/photos_tab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:icon="@drawable/ic_photos"
android:text="@string/photos" />
<com.google.android.material.tabs.TabItem
android:id="@+id/live_tab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:icon="@drawable/ic_live"
android:text="@string/live" />
</com.google.android.material.tabs.TabLayout>
<androidx.viewpager.widget.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tab_layout">
</androidx.viewpager.widget.ViewPager>
</...>
结果:
预计:
请注意:我很清楚实现此目的的其他几种方法,例如动态添加 TabItem 然后连接 ViewPager 并添加 tab_layout.selectTab(tab_layout.getTabAt(position))
ViewPager 的onPageSelected 回调。
但我希望在不对 java 代码进行任何修改的情况下将 XML TabItem 与 ViewPager 连接起来。提前致谢。
方法 tabLayout.setupWithViewPager()
removes all tabs 然后从适配器添加选项卡。
使用您的适配器填充 TabLayout
.