V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ilumer
V2EX  ›  Android

recyclerview 如何恢复状态。

  •  1
     
  •   ilumer · 2016-06-26 11:53:12 +08:00 · 10487 次点击
    这是一个创建于 3073 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 来执行的,是不会出现滑动到第一个位置的。

    • 出现滑动到第一个位置是因为恢复状态时,数据还没有加载成功吗?

    • 有没有什么办法可以更好的解决这个问题 类似于这样的 继承的 RecyclerView 继承 Recyclerview 的方法我尝试了也是没有成功。

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

    解决办法是在 onCreate 里面恢复数据的状态,这样在 onCreateView 的时候的 inflater 就会自动恢复 RecyclerView 的状态。 onViewStateRestored 的时候应该已经晚了,甚至 onActivityCreated 的时候也已经晚了。
    ilumer
        3
    ilumer  
    OP
       2016-06-26 18:15:50 +08:00
    @kamikat 谢谢成功的解决了问题。
    Override
        4
    Override  
       2016-06-27 06:47:42 +08:00
    仿佛又有人 @我
    shily
        5
    shily  
       2016-06-27 23:13:42 +08:00 via Android
    @Override 关键你名字碉堡。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2914 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 187ms · UTC 12:17 · PVG 20:17 · LAX 04:17 · JFK 07:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.