繁体   English   中英

在 ViewPager2 中删除片段时出现 IllegalArgumentException

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM