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);
 }
}