Фрагмент исчезает с ViewPager2 и FragmentStateAdapter - PullRequest
3 голосов
/ 12 марта 2019

Я создаю приложение, используя 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 полностью устраняет проблему:).

...