Android Fragments 片段状态适配器正在分离和暂停片段

wsxa1bj1  于 2023-03-18  发布在  Android
关注(0)|答案(1)|浏览(182)

我在我的Android应用程序中使用带有ViewPager 2的FragmentStateAdapter,我注意到当我滑动到另一个项目时,适配器正在分离和暂停我的片段,尽管我已经重写了适配器的onDetachedFromRecyclerView()方法,使其什么也不做。
下面是我的适配器中的相关代码:

public class MyFragmentStateAdapter extends FragmentStateAdapter {

    // constructor and other methods...

    @Override
    public void onDetachedFromRecyclerView(@NonNull RecyclerView recyclerView) {
        // Do nothing to keep fragment's view hierarchy intact
    }
}

尽管有这段代码,当我滑动到另一个项目时,我仍然看到onPause()被调用到我的片段上。我已经检查了其他可能导致片段暂停的生命周期事件,我还确保offscreenPageLimit被设置为其他值,如2,因为我有2个片段。我不确定还有什么可能导致这个问题。
对于可能发生的事情,或者如何防止我的片段被暂停,有什么想法吗?谢谢!

whlutmcx

whlutmcx1#

ViewPager 2根本不“分离”片段。但是,它确实确保只有当前屏幕是RESUMED-其他片段在STARTED状态被封端(这就是单个片段如何判断它们是否是当前选择的屏幕)。这反映了ViewPager 1在其BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT中的相同行为。如果您正在使用ViewPager 2 1,则可以验证这一点。1释放,因为每当此行为发生时,都会调用它的onFragmentMaxLifecyclePreUpdated回调。
无法关闭此功能或更改此行为,因为这是ViewPager 2的预期行为。
您绝对应该永远不要重写onDetachedFromRecyclerView,也不要调用super.onDetachedFromRecyclerView,因为这样做会导致FragmentStateAdapter内的内存泄漏,因为它无法注销自己绑定到循环视图的侦听器。

相关问题