我用包含 ViewPager 的 fragment 制作了一个应用程序。在那个 ViewPager 中,我正在使用 RecyclerView 显示列表。当我启动应用程序时,一切都很好。但是,当我滑动几个选项卡并且未显示返回列表时。不知道怎么回事。。。
在 ViewPager 中显示的 fragment
public class GradesFragmentPage extends Fragment {
View view;
List<Grade> gradeList;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.grades_page_fragment, container, false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
BetterRecyclerView betterRecyclerView = (BetterRecyclerView) getActivity().findViewById(R.id.gradesRecycler);
betterRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
this.view = view;
if(getArguments() != null) {
gradeList = getArguments().getParcelableArrayList("grades");
BetterRecyclerView betterRecyclerView = (BetterRecyclerView) view.findViewById(R.id.gradesRecycler);
betterRecyclerView.setAdapter(new GradesAdapter(getActivity(), gradeList));
}
}
}
BetterRecyclerView
public class BetterRecyclerView extends RecyclerView {
public BetterRecyclerView(Context context) {
super(context);
}
public BetterRecyclerView(Context context, AttributeSet attrs) {
super(context,attrs);
setLayoutManager(new LayoutManager() {
@Override
public LayoutParams generateDefaultLayoutParams() {
return null;
}
});
}
public BetterRecyclerView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
//we need this protected method for scroll detection
public int getVerticalScrollOffset() {
return computeVerticalScrollOffset();
}
}
最佳答案
ViewPager 本身有一个方法 setOffscreenPageLimit 允许您指定适配器保留的页面数。所以你在远处的 fragment 会被销毁。
首先查看您的代码,我没有看到您在 fragment onDestroy() 中执行任何内存释放措施。 fragment 本身被销毁和 gc'ed 的事实并不意味着您分配的所有资源也被删除。
viewPager.setOffscreenPageLimit(10);
关于java - 从 RecyclerView 中消失的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30632055/