【发布时间】:2020-06-12 12:57:45
【问题描述】:
我使用ViewPager2 和FragmentStateAdapter 显示5 个fragments。每个fragment 都有ExoPlayer 实例。我正在维护ViewPager2.setOffscreenPageLimit(1),它可以很好地加载fragments。但是,当我将ViewPager2 向下滚动到pos4 时,pos2 和pos1 应该调用onStop()、onDestroyView()、onDestroy()。但这并没有发生。
除非我按onBackPress(),否则这些方法都不会执行。 FragmentStateAdapter 的实现部分有什么我遗漏的吗?
我想对onDestroyView() 执行exoPlayer.release() 以释放应用程序的内存。
这里是代码
活动
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();
}
}
更新
【问题讨论】:
-
您是否尝试在 onDestroy 而不是 onDestroyView 中释放 exo 播放器实例?
-
@ParagPawar 我删除了以前的 cmets 以避免混淆。最后,我得到了一个令人满意的解决方案。请参考答案:)
标签: android android-viewpager fragment exoplayer android-viewpager2