Удаление / добавление фрагментов в индексе приводит к неожиданному поведению в Viewpager2. Это было невозможно с ViewPager
, но ожидалось, что оно будет работать с Viewpager2
. Это вызывает повторяющиеся фрагменты и несинхронно c TabLayout
. Вот демонстрационный проект , который воспроизводит эту проблему. Есть кнопка переключения, которая удаляет фрагмент и повторно присоединяет его к определенному индексу. В этом случае прикрепленный фрагмент должен быть зеленого цвета, но он синего цвета и как-то есть 2 синих фрагмента.
вот как выглядит мой адаптер
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
}
}
Я подал ошибку с Google также