
RecyclerView在fragment销毁后,恢复状态都会自动滑动到第一位。
@Override public void onSaveInstanceState(Bundle outState) { mGridLayoutState = gridLayoutManager.onSaveInstanceState(); outState.putParcelble(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 的方法我尝试了也是没有成功。
1 karonl 2016-06-26 12:49:33 +08:00 出现滑动到第一个位置是因为恢复状态时,数据还没有加载成功,因为滑动发生在数据加载之前。所以应该先记录位置,在加载成功反馈中再进行滚动。 |
2 kamikat 2016-06-26 12:59:34 +08:00 出现滑动到第一个位置是因为恢复状态时,数据还没有加载成功吗? 应该是这个原因没错。 解决办法是在 onCreate 里面恢复数据的状态,这样在 onCreateView 的时候的 inflater 就会自动恢复 RecyclerView 的状态。 onViewStateRestored 的时候应该已经晚了,甚至 onActivityCreated 的时候也已经晚了。 |
4 Override 2016-06-27 06:47:42 +08:00 仿佛又有人 @我 |