Android LayoutManager.onSaveInstanceState()不工作
我正试图用Android LayoutManager.onSaveInstanceState()不工作,android,android-layout,android-recyclerview,onsaveinstancestate,Android,Android Layout,Android Recyclerview,Onsaveinstancestate,我正试图用GridLayoutManager保存我的RecyclerView的状态,但在调用活动的onSaveInstanceState()时,以及在布局管理器上尝试调用总是返回的onSaveInstanceState()时。我尝试使用方法“findFirstVisibleItemPosition”,但它总是返回-1 RecyclerView有适配器,适配器有一些元素,我可以滚动它们!我不知道为什么我不能获得完全初始化和工作组件的项目位置!请帮忙 这是我的代码: @Override protec
GridLayoutManager
保存我的RecyclerView的状态,但在调用活动的onSaveInstanceState()
时,以及在布局管理器上尝试调用总是返回的onSaveInstanceState()
时。我尝试使用方法“findFirstVisibleItemPosition
”,但它总是返回-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);
}
问题解决了!要保存布局管理器的状态,需要在活动的onPause方法中调用方法LayoutManager.onSaveInstanceState()。因为在活动LayoutManager的onSaveInstanceState中,已将其从视图中清除,或者仅删除布局配置。
代码示例:
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);
}
}
问题解决了!要保存布局管理器的状态,需要在活动的onPause方法中调用方法LayoutManager.onSaveInstanceState()。因为在活动LayoutManager的onSaveInstanceState中,已将其从视图中清除,或者仅删除布局配置。
代码示例:
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);
}
}
这适用于片段
?这适用于片段
?