在索引处删除/添加 fragment 会导致 Viewpager2 出现意外行为。 ViewPager
无法做到这一点但预计与 Viewpager2
合作.它会导致重复 fragment 和不同步TabLayout
.
Here is a demo project它重现了这个问题。有一个切换按钮可以删除 fragment 并将其重新附加到特定索引处。在这种情况下,附加的 fragment 应该是绿色的,但它是蓝色的,并且不知何故有 2 个蓝色 fragment 。
这是我的适配器的外观
class ViewPager2Adapter(activity: FragmentActivity) : FragmentStateAdapter(activity) {
val fragmentList: MutableList<FragmentName> = mutableListOf()
override fun getItemCount(): Int {
return fragmentList.size
}
override fun createFragment(position: Int): Fragment {
return when (fragmentList[position]) {
FragmentName.WHITE -> WhiteFragment()
FragmentName.RED -> RedFragment()
FragmentName.GREEN -> GreenFragment()
FragmentName.BLUE -> BlueFragment()
}
}
fun add(fragment: FragmentName) {
fragmentList.add(fragment)
notifyDataSetChanged()
}
fun add(index: Int, fragment: FragmentName) {
fragmentList.add(index, fragment)
notifyDataSetChanged()
}
fun remove(index: Int) {
fragmentList.removeAt(index)
notifyDataSetChanged()
}
fun remove(name: FragmentName) {
fragmentList.remove(name)
notifyDataSetChanged()
}
enum class FragmentName {
WHITE,
RED,
GREEN,
BLUE
}
}
我已提交 bug与谷歌以及
最佳答案
事实证明,如果您使用 mutable
,则需要覆盖这两种方法。收藏于 ViewPager2
override fun getItemId(position: Int): Long {
return fragmentList[position].ordinal.toLong()
}
override fun containsItem(itemId: Long): Boolean {
val fragment = FragmentName.values()[itemId.toInt()]
return fragmentList.contains(fragment)
}
在我当前的适配器中添加这两个可以解决问题
关于android - ViewPager2 无法动态添加删除 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61406176/