gpt4 book ai didi

android - 使用 ViewPager2 和 FragmentStateAdapter 的 Fragment 生命周期行为

转载 作者:行者123 更新时间:2023-12-02 18:51:02 71 4
gpt4 key购买 nike

我使用 ViewPager2FragmentStateAdapter 显示 5 个 fragments。每个 fragment 都有 ExoPlayer 实例。我正在维护ViewPager2.setOffscreenPageLimit(1),它对于加载 fragment 效果很好。但是,当我向下滚动 ViewPager2pos4 时,pos2pos1 应该调用 onStop ()onDestroyView()onDestroy()。但这并没有发生。

除非我按 onBackPress(),否则这些方法都不会执行。 FragmentStateAdapter 的实现部分有什么我遗漏的吗?

我想在 onDestroyView() 上执行 exoPlayer.release() 以释放应用程序的内存。

这是代码

Activity

List<Post> postsList = response.getPosts();
ViewPagerAdapter adapter = new ViewPagerAdapter(this, postsList);
binding.pager.setOrientation(ViewPager2.ORIENTATION_VERTICAL);
binding.pager.setOffscreenPageLimit(1);
binding.pager.setAdapter(adapter);

ViewPagerAdapter

public class ViewPagerAdapter extends FragmentStateAdapter {

private List<Post> postList;

public ViewPagerAdapter(@NonNull FragmentActivity fragmentActivity, List<Post> postList) {
super(fragmentActivity);
this.postList = postList;
}


@NonNull
@Override
public Fragment createFragment(int position) {
return new PostFragment(postList.get(position), position);
}

@Override
public int getItemCount() {
if (postList == null) return 0;
return postList.size();
}

}

已更新

This is also a similar question

最佳答案

我已提到此 POST 解决方案。

VeiwPager2 基于 RecyclerView 组件构建,并且 FragmentStateAdapter 取代了 FragmentStatePagerAdapter

假设 offscreenPageLimit = 1ViewPager2 将有 3fragments2 RecylerView Preloading Strategies 预加载/缓存的 fragment 因此,总共将加载 5 fragment

要禁用预加载和缓存,我执行了:

private void disableCacheOfViewPager() {

try {

// Disable Preloading
((RecyclerView) binding.pager.getChildAt(0)).getLayoutManager().setItemPrefetchEnabled(false);
// Disable Cache
((RecyclerView) binding.pager.getChildAt(0)).setItemViewCacheSize(0);

} catch (NullPointerException e) {

Log.i(TAG, "disableCacheOfViewPager: " + e.getMessage());
}
}

Scroll Logs Before

//1st
onStart: 0
onResume: 0
onStart: 1

//2nd
onStart: 2
onPause: 0
onResume: 1

//3rd
onStart: 3
onPause: 1
onResume: 2

//4th
onStart: 4
onPause: 2
onResume: 3

//5th
onStart: 5
onStop: 0
onDestroyView: 0
onDestroy: 0
onDetach: 0
onPause: 3
onResume: 4

Scroll Logs After

//1st
onStart: 0
onResume: 0
onStart: 1

//2nd
onStart: 2
onPause: 0
onResume: 1

//3rd
onStart: 3
onStop: 0
onDestroyView: 0
onDestroy: 0
onDetach: 0
onPause: 1
onResume: 2

关于android - 使用 ViewPager2 和 FragmentStateAdapter 的 Fragment 生命周期行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60451423/

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