У меня есть фрагменты, которые управляются внутри ViewPager и работают довольно хорошо.Он использует FragmentStatePagerAdapter для управления фрагментами, и все они принадлежат к одному и тому же типу.
Этот ViewPager работает внутри родительского фрагмента .Однако, когда пользователь нажимает кнопку «Назад», чтобы оставить родительский фрагмент, фрагменты, которые внутри ViewPager не перейдут в Pause-> Destroy-> onDetach и т. Д.
Кажется, что они остаются в своем состоянии onResume дажекогда они больше не видны, хотя родительский фрагмент, который создал PagerAdapter, был уничтожен и отсоединен должным образом.
Представьте, что когда пользователь, кажется, уже находится в другом экране, тогда, когда он нажимает кнопку «Домой», я вижу, что фрагменты, которые были в ViewPager (которые больше не видны), переходят в состояние паузы, икогда пользователь возвращается к приложению, я вижу, что фрагменты, которые были в ViewPager, возобновились, когда они не видны.
Есть ли какое-либо объяснение для такого поведения?
Здесь частьмой код, который инициализирует PagerAdapter в родительском фрагменте:
private fun configureScreen() {
tabs_view_pager.offscreenPageLimit = TabsPagerAdapter.NUM_PAGES - 1
fragmentManager?.let {
tabsPagerAdapter = TabsPagerAdapter(it)
tabs_view_pager.adapter = tabsPagerAdapter
}
}
А вот часть кода PagerAdapter:
class TabsPagerAdapter(fm : FragmentManager) : FragmentStatePagerAdapter(fm) {
companion object {
const val NUM_PAGES = 3
private var pagesTitle = arrayOf("" , "", "")
}
override fun getItem(item: Int): Fragment {
return ChildFragment.newInstance()
}
override fun getCount(): Int {
return NUM_PAGES
}
fun updateChildFragments(someData: FragmentData?) {
//process new data
notifyDataSetChanged()
}
}
override fun getItemPosition(fragment: Any): Int {
(fragment as ChildFragment).refresh()
return PagerAdapter.POSITION_UNCHANGED
}
}