RecyclerView
在fragment
销毁后,恢复状态都会自动滑动到第一位。
@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 的方法我尝试了也是没有成功。
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
仿佛又有人 @我
|