Android - 保存RecyclerView内容在一个片段中工作,但在另一个片段中不起作用

时间:2016-06-21 04:36:07

标签: android android-fragments android-recyclerview

所以我在Fragment中使用了与其他片段相同的方法,但只有我使用它的第一个Fragment将其状态和项目保存在Adapter内。

这里的onViewCreated中的代码检查Adapter是否为空,如果不是,请使用相同的旧适配器:

        if(getArguments() != null){
            Parcelable savedRecyclerLayoutState = getArguments().getParcelable(utilities.BUNDLE_RECYCLER_LAYOUT);
            if (getArguments().getString("finishPost") != null && getArguments().getString("finishPost").equals("true")){
                refreshView();
                lobiProgressBar.setVisibility(View.VISIBLE);
            } else {
                if(savedRecyclerLayoutState == null){
                    lobiAdapter = new LobiAdapter(this.getActivity());
                    lobiAdapter.setDisplay(width, height);
                    recyclerView.setAdapter(lobiAdapter);
                    refreshView();
                } else {
                    if (lobiAdapter != null && lobiAdapter.getItemCount() > 0) {
                        manager.onRestoreInstanceState(savedRecyclerLayoutState);
                        if(lobiAdapter == null){
                            lobiAdapter = new LobiAdapter(this.getActivity());
                            lobiAdapter.setDisplay(width, height);
                        }
                        recyclerView.setAdapter(lobiAdapter);
                        lobiProgressBar.setVisibility(View.GONE);
                    } else /*if (lobiAdapter != null && lobiAdapter.getItemCount() == 0)*/{
                        refreshView();
                        lobiProgressBar.setVisibility(View.VISIBLE);
                    }
                }
            }
        } else {
            refreshView();
            lobiProgressBar.setVisibility(View.VISIBLE);
        }

此处的onPause()方法位于保存Fragment状态的同一RecyclerView {/ p>}中:

@Override
public void onPause() {
    super.onPause();
    getArguments().putParcelable(utilities.BUNDLE_RECYCLER_LAYOUT, recyclerView.getLayoutManager().onSaveInstanceState());
    if(getActivity().getSupportFragmentManager().getBackStackEntryCount() > 1){
        ((NewsfeedActivity)getActivity()).hideToolbarBottom();
    }
}

奇怪的是,它保存了适配器的值,但我不知道何时或如何。当我调试它时,lobiAdapter显示它中有项目,而其他Fragments使用相同的保存状态方法没有项目。

我实际上做错了还是我不知道我为保存州和物品所做的事情?

0 个答案:

没有答案