我正在使用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
}
}
在创建每个片段时,我会传递所需的布局资源ID。
我的视图页适配器类如下:
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:
在我的主要活动中的onResume()
中调用notifyDataSetChanged()
暂时解决了问题,尽管感觉比必要的要重。 (原始的ViewPager
+FragmentStatePagerAdapter
不需要这种调用来从后台正确重新加载片段。)
更新3:
将我的依赖项从androidx.viewpager2:viewpager2:1.0.0-alpha01
更新到最近发布的androidx.viewpager2:viewpager2:1.0.0-alpha02
完全解决了该问题 :)
childFragmentManager()
而不是supportFragmentManager()
。 - Rodrigo QueirozViewPager2
是主活动布局的根视图。 - rstockbridge