recyclerview 如何恢复状态。

2016-06-26 11:53:12 +08:00
 ilumer

RecyclerViewfragment销毁后,恢复状态都会自动滑动到第一位。

@Override
    public void onSaveInstanceState(Bundle outState) {
        mGridLayoutState = gridLayoutManager.onSaveInstanceState();
        outState.putParcelable(RECYCLERVIEW_LATOUTSTATE,mGridLayoutState);
        outState.putParcelableArrayList(RECYCLERVIEW_LAYOUTCONTENT,(ArrayList<? extends Parcelable>)mList);
        super.onSaveInstanceState(outState);
    }
    @Override
    public void onViewStateRestored(@Nullable Bundle savedInstanceState) {
        if (savedInstanceState!=null){
            List<MovieData.ResultsBean> temp = savedInstanceState.getParcelableArrayList(RECYCLERVIEW_LAYOUTCONTENT);
            if (temp!=null) {
                mList.addAll(temp);
            }
            mGridLayoutState = savedInstanceState.getParcelable(RECYCLERVIEW_LATOUTSTATE);
            page = savedInstanceState.getInt(CURRENT_PAGE);
        }
        super.onViewStateRestored(savedInstanceState);
    }
@Override
    public void onResume() {
        super.onResume();
        if (mGridLayoutState!=null) {
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    gridLayoutManager.onRestoreInstanceState(mGridLayoutState);
                }
            },400);
        }
    }

如果使用了 handler 来执行的,是不会出现滑动到第一个位置的。

6478 次点击
所在节点    Android
5 条回复
karonl
2016-06-26 12:49:33 +08:00
出现滑动到第一个位置是因为恢复状态时,数据还没有加载成功,因为滑动发生在数据加载之前。所以应该先记录位置,在加载成功反馈中再进行滚动。
kamikat
2016-06-26 12:59:34 +08:00
出现滑动到第一个位置是因为恢复状态时,数据还没有加载成功吗?
应该是这个原因没错。

解决办法是在 onCreate 里面恢复数据的状态,这样在 onCreateView 的时候的 inflater 就会自动恢复 RecyclerView 的状态。 onViewStateRestored 的时候应该已经晚了,甚至 onActivityCreated 的时候也已经晚了。
ilumer
2016-06-26 18:15:50 +08:00
@kamikat 谢谢成功的解决了问题。
Override
2016-06-27 06:47:42 +08:00
仿佛又有人 @我
shily
2016-06-27 23:13:42 +08:00
@Override 关键你名字碉堡。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/288371

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX