【发布时间】:2019-12-07 20:08:48
【问题描述】:
我在Fragment 中有一个Viewpager2(我们称之为HomeFragment)。 Viewpager 本身也包含 Fragments。当我离开HomeFragment 时,它的视图将被破坏,当我返回时,视图将被重新创建。现在我在onViewCreated()期间将Viewpager2的适配器设置在HomeFragment中。因此,当我导航回HomeFragment 时,将重新创建适配器,这也会重新创建Viewpager2 中的所有Fragments,并且当前项目重置为0。如果我尝试重新使用我实例化的适配器第一次创建HomeFragmenti 得到一个异常,因为FragmentStateAdapter内部的这个检查:
public void onAttachedToRecyclerView(@NonNull RecyclerView recyclerView) {
checkArgument(mFragmentMaxLifecycleEnforcer == null);
有没有人知道我在返回时如何防止重新创建所有内容?否则,这是一个相当大的性能开销,会阻碍我的用户体验。
【问题讨论】:
-
你有什么解决办法吗?我也有同样的问题
-
不完全,但我认为问题有所不同。重新创建适配器很好,我只是在我的数据绑定绑定适配器中调用了
notifyDataSetChanged(),并且每次创建视图时都会调用它,因为视图模型的实时数据被重新附加。您需要检查数据是否已更改,然后才调用notifyDataSetChanged(),因为这将重新创建所有片段。我也将不得不尝试为此使用DiffUtil -
就我而言,我只是评论
viewPager.offscreenPageLimit = 3并且当前项目保存状态 -
您找到解决方案了吗?我遇到了类似的问题。谷歌搜索...
-
有什么解决办法吗?我在同一条船上。 @extmkv,在升级到 beta05 时,它是哪个依赖项解决了您的问题?
标签: android android-fragments android-recyclerview android-navigation android-viewpager2