java - 从 RecyclerView 中消失的数据

标签 java android android-fragments android-viewpager android-recyclerview

我用包含 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/

相关文章:

java - 如何在Android Studio中从SVN导入模块

java - 新 ArrayList<T> (T[] arr)

java - Realm.io [Java] 通知 - 如何仅监听特定表中的更改?

android - Leanback 库是否支持 API 级别 19 Android for TV 应用程序?

Android - fragment 事务上的自定义动画未运行

java - Maven SonarQube 多模块

java - 从 json 字符串中删除字符 "\"

android - 可以获得具有产品 flavor 的 .aar

java - 如何在 .xml 中实现数据库内容并将其呈现在 ListView 中

android - 将对象从 Activity 传递到 ViewPager 再到 Fragment