我在我的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个片段。我不确定还有什么可能导致这个问题。
对于可能发生的事情,或者如何防止我的片段被暂停,有什么想法吗?谢谢!
1条答案
按热度按时间whlutmcx1#
ViewPager 2根本不“分离”片段。但是,它确实确保只有当前屏幕是
RESUMED
-其他片段在STARTED
状态被封端(这就是单个片段如何判断它们是否是当前选择的屏幕)。这反映了ViewPager 1在其BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT
中的相同行为。如果您正在使用ViewPager 2 1,则可以验证这一点。1释放,因为每当此行为发生时,都会调用它的onFragmentMaxLifecyclePreUpdated
回调。无法关闭此功能或更改此行为,因为这是ViewPager 2的预期行为。
您绝对应该永远不要重写
onDetachedFromRecyclerView
,也不要调用super.onDetachedFromRecyclerView
,因为这样做会导致FragmentStateAdapter
内的内存泄漏,因为它无法注销自己绑定到循环视图的侦听器。