嗨,我viewPager2有 5 個片段。基于特定條件,我要么顯示所有 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
uj5u.com熱心網友回復:
java.lang.IllegalArgumentException: No fragment define for position 2
這個錯誤意味著它試圖找到位置 2 的片段;但由于地圖只有 2 個專案(位置 0、1),所以找不到。
因此,您更改了串列大小,但這不會影響配接器大小。
ViewPager2內部函式RecylerView; 當我們洗掉/更改 中的專案時RecyclerView,我們必須呼叫adapter.notifyXX方法。
中也需要相同的ViewPager2;在您的情況下notifyItemRemoved(),需要為已洗掉的職位呼叫:
init {
if(conditionIsTrue) {
map.remove(2)
notifyItemRemoved(2)
map.remove(3)
notifyItemRemoved(3)
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/463697.html
