gpt4 book ai didi

android - fragment 随着 ViewPager2 和 FragmentStateAdapter 消失

转载 作者:行者123 更新时间:2023-12-03 13:28:00 49 4
gpt4 key购买 nike

我正在使用 ViewPager2 构建应用程序滑动时显示不同的 fragment 。我的适配器扩展 FragmentStateAdapter如所述here .

当我将我的应用程序放入后台然后再次恢复时,当前 fragment 消失了。我需要做些什么来确保正确恢复当前 fragment ?

(注意:我问的是 FragmentStateAdapter ,而不是 FragmentPagerAdapterFragmentStatePagerAdapter 。)

更新 1 :

我的 fragment 类如下:

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
}
}

}

我在创建每个 fragment 时传入所需的布局资源 ID。

我的 View 寻呼机适配器类如下:
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()在我的主要 Activity 中,现在解决了这个问题,尽管它感觉像是一个比必要的更重的锤子。 (原来的 ViewPager + FragmentStatePagerAdapter 在从后台引入应用程序后不需要这种类型的调用来正确重新加载 fragment 。)

更新 3 :

androidx.viewpager2:viewpager2:1.0.0-alpha01 更新我的依赖项到最近发布的 androidx.viewpager2:viewpager2:1.0.0-alpha02完全解决了这个问题:)。

最佳答案

您需要将 FragmentActivity 或 Fragment 实例作为 FragmentStateAdapter 构造函数参数传递,而不是 FragmentManager。

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
}
}
官方文档: Read Here

关于android - fragment 随着 ViewPager2 和 FragmentStateAdapter 消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55128801/

49 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com