我已經將ViewPager遷移到ViewPager2和配接器FragmentPageAdapter遷移到FragmentStateAdaper。在FragmentPageAdapter中,有一個叫做getItemPostion(Object obj)的方法,通過使用這個方法,我能夠替換片段。在FragmentStateAdaper類中沒有這個方法,如何用FragmentStateAdaper替換viewpager2中的片段。
uj5u.com熱心網友回復:
你必須在FragmentStateAdapter中覆寫createFragment(position: Int)方法,該方法為各個位置回傳Fragment。
createFragment可以像這樣覆寫
override fun createFragment(position: Int)。片段 {
return when (position) {
0 -> FragmentOne()
1 -> FragmentTwo()
else -> FragmentOne()
}
}
除此之外,你還必須在FragmentStateAdapter中覆寫getItemCount(),在那里你必須回傳片段的總數。
uj5u.com熱心網友回復:
在你的活動設定viewpager中
private fun setTabs(){
listFragmentTitles = arrayListOf("Fragment1"/span>,"Fragment2"/span>,"Fragment3"/span>)
viewPagerFragmentAdapter =
ViewPagerFragmentAdapter(this, listFragmentTitles)
binding.viewPager.adapter = viewPagerFragmentAdapter
TabLayoutMediator(
binding.tabLayout, binding.viewPager
) { tab: TabLayout.Tab, position: Int ->
tab.text = listFragmentTitles[position](標簽)。
}.attach()
view pager配接器
內部 class ViewPagerFragmentAdapter(
fragmentActivity: FragmentActivity,
listFragmentTitles: ArrayList<String>
) :
FragmentStateAdapter(fragmentActivity) {
val titlesList = listFragmentTitles
override fun createFragment(position: Int)。片段 {
when (position) {
0 -> return Fragment1()
1 -> return Fragment2()
2 -> return Fragment3()
}
return Fragment1()
}
override fun getItemCount()/span>: Int {
return titlesList.size
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/310119.html
標籤:
