我有3个片段- F1、F2和F3。我已经将它们附加到了一个PagerAdapter(viewPager 2)中。PagerAdapter在PagerFragment(在onCreateView中)中的初始化是-
binding = PagerFargmentBinding.inflate(inflater, container, false)
adapter = PagerAdapter(this)
binding?.viewPager?.adapter = adapter
binding?.viewPager?.isSaveEnabled = false
现在,我的PagerAdapter实现--〉
class PagerAdapter(
fragment: PagerFragment,
) : FragmentStateAdapter(fragment) {
private var nextFragment: BaseFragment? = null
private var baseFragment: BaseFragment = F1()
override fun getItemCount() = 2
override fun createFragment(position: Int): Fragment {
return when (position) {
0 -> {
baseFragment
}
else -> {
nextFragment ?: DummyDialogFragment()
}
}
}
fun setNextFragment(page: Int) {
nextFragment = null
nextFragment = if (page == 1) {
F2()
} else if (page == 2) {
F3()
} else {
null
}
}
}
现在从我的呼叫器片段我正在设定下一个片段-
fun navigateTo(page: Int) {
adapter.setNextFragment(page)
if (page == 0) {
binding?.viewPager?.currentItem = page
} else {
binding?.viewPager?.currentItem = 1
}
}
- 从F1片段中,我使用1和2调用此函数。第一次运行时运行正常。***如果是第一次,如果我将F2片段作为nextFragment加载,则不会显示F3片段。**我已尝试调试,发现nextFragment值正在更新,但不知何故,添加的片段未从寻呼适配器中删除。
是否有任何方法可以动态添加/删除片段? - 我从这个模块中获得了实现思想-https://intensecoder.com/android-swipe-fragments-with-viewpager2-in-kotlin/ *
1条答案
按热度按时间x6h2sr281#
在对stackoverflow进行了相当多的探索之后,在我的一位同行的帮助下,我找到了解决方案。解决方案是-
实际上问题是,createFragment()在第一次触发后就没有触发。所以我必须重写StatePagerAdapter的两个函数- getItemViewType()和getItemId()。我现在的实现-
从分页器片段调用这个-
setNextFragment()分配所需的F2()或F3()片段。并且通过getItemId()和getItemViewType()上的覆盖实现的帮助,每次都调用createFragment(),因此我可以动态添加/删除片段。