Я создаю приложение, используя ViewPager2
, которое отображает различные фрагменты при перелистывании.Мой адаптер расширяет FragmentStateAdapter
, как описано здесь .
Когда я помещаю свое приложение в фоновый режим и затем возобновляю его снова, текущий фрагмент исчезает.Что мне нужно сделать, чтобы убедиться, что текущий фрагмент восстановлен правильно?
(Примечание: я спрашиваю о FragmentStateAdapter
, а не FragmentPagerAdapter
или FragmentStatePagerAdapter
.)
Обновление 1 :
Мой класс фрагментов выглядит следующим образом:
class PagerFragment : Fragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val layoutResId: Int = arguments!!.getInt(ARG_LAYOUT_RES_ID)
return inflater.inflate(layoutResId, container, false)
}
companion object {
private const val ARG_LAYOUT_RES_ID = "layoutResId"
fun newInstance(layoutResId: Int): PagerFragment {
val args = Bundle()
args.putInt(ARG_LAYOUT_RES_ID, layoutResId)
val fragment = PagerFragment()
fragment.arguments = args
return fragment
}
}
}
Я передаю требуемый идентификатор ресурса макета для каждого фрагмента, когда он
Мой класс адаптера пейджера выглядит следующим образом:
class ViewPagerAdapter(fm: FragmentManager) : FragmentStateAdapter(fm)
{
override fun getItem(position: Int): Fragment {
return PagerFragment.newInstance(Helper.getLayoutResId(position))
}
override fun getItemCount(): Int {
return Helper.getSize()
}
}
Добавление retainInstance = true
не решает проблему.
Обновление 2 :
Вызов notifyDataSetChanged()
в onResume()
в моей основной деятельности на данный момент решает проблему, хотя это похоже на более тяжелый молот, чем это необходимо.(В исходном ViewPager
+ FragmentStatePagerAdapter
не требуется этот тип вызова для правильной перезагрузки фрагментов после загрузки приложения из фона.)
Обновление 3 :
Обновление моей зависимости с androidx.viewpager2:viewpager2:1.0.0-alpha01
до недавно выпущенной androidx.viewpager2:viewpager2:1.0.0-alpha02
полностью устраняет проблему:).