LayoutManager.onSaveInstanceState() 不工作
LayoutManager.onSaveInstanceState() not working
我试图用 GridLayoutManager
保存我的 RecyclerView
的状态,但是当我调用 activity 的 onSaveInstanceState()
和我尝试调用 onSaveInstanceState()
在总是 return the same object 的布局管理器上。我尝试使用方法“findFirstVisibleItemPosition
”,但它总是 return -1。
RecyclerView 有适配器,适配器有一些元素,我可以滚动它们!我不知道为什么我无法获取完全初始化和工作组件的项目位置!请帮忙!
有我的代码:
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putParcelable(BUNDLE_MOVIES_RECYCLER_VIEW_STATE, mMoviesRecyclerView.getLayoutManager().onSaveInstanceState());
outState.putInt(BUNDLE_SEGMENT_POSITION, mSelectedFilterPosition);
outState.putSerializable(BUNDLE_NOW_PLAYING_MOVIE, mNowPlayingMovie);
outState.putSerializable(BUNDLE_SEGMENTED_MOVIES, mSegmentMovies);
}
问题已解决!为了保存布局管理器的状态,需要在 activity 的 onPause 方法中调用方法 LayoutManager.onSaveInstanceState() 。因为在 activity 的 onSaveInstanceState 中,LayoutManager 已经从视图中清除了它的子元素,或者只是删除了布局配置。
代码示例:
public class MainActivity extends AppCompatActivity {
RecyclerView recyclerView;
private Parcelable mLayoutManagerState;
private static final String LAYOUT_MANAGER_STATE = "LAYOUT_MANAGER_STATE";
@Override
protected void onPause() {
super.onPause();
mLayoutManagerState = recyclerView.getLayoutManager().onSaveInstanceState();
}
@Override
public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
super.onCreate(savedInstanceState, persistentState);
recyclerView = (RecyclerView) findViewById(R.id.recyclerview);
if (savedInstanceState != null) {
mLayoutManagerState = savedInstanceState.getParcelable(LAYOUT_MANAGER_STATE);
recyclerView.getLayoutManager().onRestoreInstanceState(mLayoutManagerState);
}
}
@Override
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
super.onSaveInstanceState(outState, outPersistentState);
outState.putParcelable(LAYOUT_MANAGER_STATE, mLayoutManagerState);
}
}
我试图用 GridLayoutManager
保存我的 RecyclerView
的状态,但是当我调用 activity 的 onSaveInstanceState()
和我尝试调用 onSaveInstanceState()
在总是 return the same object 的布局管理器上。我尝试使用方法“findFirstVisibleItemPosition
”,但它总是 return -1。
RecyclerView 有适配器,适配器有一些元素,我可以滚动它们!我不知道为什么我无法获取完全初始化和工作组件的项目位置!请帮忙!
有我的代码:
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putParcelable(BUNDLE_MOVIES_RECYCLER_VIEW_STATE, mMoviesRecyclerView.getLayoutManager().onSaveInstanceState());
outState.putInt(BUNDLE_SEGMENT_POSITION, mSelectedFilterPosition);
outState.putSerializable(BUNDLE_NOW_PLAYING_MOVIE, mNowPlayingMovie);
outState.putSerializable(BUNDLE_SEGMENTED_MOVIES, mSegmentMovies);
}
问题已解决!为了保存布局管理器的状态,需要在 activity 的 onPause 方法中调用方法 LayoutManager.onSaveInstanceState() 。因为在 activity 的 onSaveInstanceState 中,LayoutManager 已经从视图中清除了它的子元素,或者只是删除了布局配置。 代码示例:
public class MainActivity extends AppCompatActivity {
RecyclerView recyclerView;
private Parcelable mLayoutManagerState;
private static final String LAYOUT_MANAGER_STATE = "LAYOUT_MANAGER_STATE";
@Override
protected void onPause() {
super.onPause();
mLayoutManagerState = recyclerView.getLayoutManager().onSaveInstanceState();
}
@Override
public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
super.onCreate(savedInstanceState, persistentState);
recyclerView = (RecyclerView) findViewById(R.id.recyclerview);
if (savedInstanceState != null) {
mLayoutManagerState = savedInstanceState.getParcelable(LAYOUT_MANAGER_STATE);
recyclerView.getLayoutManager().onRestoreInstanceState(mLayoutManagerState);
}
}
@Override
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
super.onSaveInstanceState(outState, outPersistentState);
outState.putParcelable(LAYOUT_MANAGER_STATE, mLayoutManagerState);
}
}