Я настроил FragmentStatePageAdapter, чтобы пролистывать фрагменты одного макета и разные данные (профили пользователей).
Когда я даю список из 2 пунктов, все работает хорошо.
Если я даю ему 3 или более предметов, он создает представления для фрагментов, но при третьем содержимом свайпа становится пустым, независимо от того, в каком направлении я пролистываю (вперед, затем вперед, вперед, назад). Если я аккуратно перемещаюсь к третьему элементу, все еще удерживая экран, я вижу его действительное содержимое, но когда я заканчиваю слайд, отпуская экран, все исчезает.
Адаптер страницы установлен как показано ниже. (swipeList - список идентификаторов пользователей, swipeEntityType == 0, каждое пользовательское содержимое загружается с помощью "uid", передаваемого через пакет)
class SwipePagerFragment : Fragment() {
private lateinit var parent: MainActivity
private lateinit var state: State
private lateinit var ctx: Context
private lateinit var swipeList: MutableList<Int>
private lateinit var pager: ViewPager
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
val view = inflater.inflate(R.layout.fragment_swipe_pager, container, false)
parent = activity as MainActivity
state = parent.state
ctx = state.ctx
swipeList = state.swipeList
pager = view.findViewById(R.id.fragmentSwipePager_pager)
val pagerAdapter = ScreenSlidePagerAdapter(childFragmentManager)
pager.adapter = pagerAdapter
return view
}
private inner class ScreenSlidePagerAdapter(fm: FragmentManager) : FragmentStatePagerAdapter(fm) {
override fun getCount(): Int = swipeList.size
override fun getItem(position: Int): Fragment = when (state.swipeEntityType) {
0 -> {
makeUserFragment(swipeList[position])
}
else -> {
makeEventFragment(swipeList[position])
}
}
}
private fun makeUserFragment(uid: Int): UserFragment {
val bundle = Bundle()
bundle.putInt("uid", uid)
val frag = UserFragment()
frag.arguments = bundle
return frag
}
private fun makeEventFragment(eid: Int): EventFragment {
val bundle = Bundle()
bundle.putInt("eid", eid)
val frag = EventFragment()
frag.arguments = bundle
return frag
}
}