[英]IllegalArgumentException when Deleting fragments in ViewPager2
您好,我有 5 个片段的viewPager2
。 根据特定条件,我要么显示所有 5 个片段,要么我希望用户只能滚动浏览其中的 3 个片段(页面:1、4、5)。
为了删除片段 2 和 3,我做了以下操作,但它崩溃了,抱怨片段 2 不存在
private inner class PagerAdapter(fragment:Fragment) : FragmentStateAdapter(fragment) {
val map = mutableMapOf(1 to Frag1, 2 to Frag2, 3 to Frag3, 4 to Frag4, 5 to Frag5)
override fun createFragment(pos: Int): Fragment {
return if(!map.containsKey(pos)) null else map[pos]!!
}
override getItemCount(): Int = map.size
init {
if(conditionIsTrue) {
map.remove(2)
map.remove(3)
}
}
}
当满足某些条件时,如何从viewPager
中删除某些片段?
错误:当我滑动移动到下一页时:
java.lang.IllegalArgumentException: No fragment define for position 2
java.lang.IllegalArgumentException: No fragment define for position 2
这个错误意味着它试图找到 position 2 的片段; 但找不到,因为 map 只有 2 个项目(位置 0、1)。
因此,您更改了列表大小,但这不会影响适配器大小。
ViewPager2
内部与RecylerView
一起运行; 当我们删除/更改RecyclerView
中的项目时,我们必须调用adapter.notifyXX
方法。
ViewPager2
也需要同样的东西; 在您的情况下,需要为删除的位置调用notifyItemRemoved()
:
init {
if(conditionIsTrue) {
map.remove(2)
notifyItemRemoved(2)
map.remove(3)
notifyItemRemoved(3)
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.