大家好,我有一个包含5个片段的viewPager2
。根据特定的条件,我要么显示所有5个片段,要么让用户只能滚动其中3个片段(page:第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
1条答案
按热度按时间1tu0hz3e1#
java.lang.IllegalArgumentException: No fragment define for position 2
这个错误意味着它试图找到位置2的片段;但是因为Map只有2个项目(位置0,1),所以没有找到它。
因此,您更改了列表大小,但这不会影响适配器大小。
ViewPager2
在内部与RecylerView
一起工作;当我们删除/更改RecyclerView
中的项时,我们必须调用adapter.notifyXX
方法。在
ViewPager2
中也需要同样的情况;在您的情况下,需要为删除的位置调用notifyItemRemoved()
: