Фрагмент исчезает с ViewPager2 и FragmentStateAdapter

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

0 ответов

Вместо FragmentManager вам необходимо передать свой экземпляр FragmentActivity или Fragment в качестве параметра конструктора FragmentStateAdapter.

private inner class ViewPagerAdapter(fragment: Fragment) :
    FragmentStateAdapter(fragment) {

     val fragments = arrayOf(
        MyFragment1(),
        MyFragment2()
    )

    override fun createFragment(position: Int): Fragment {
        return fragments[position]
    }

    override fun getItemCount(): Int {
        return fragments.size
    }
}

Официальная документация: прочтите здесь

Другие вопросы по тегам