1

我正在尝试保存我RecyclerView的状态GridLayoutManager,但是在调用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);
}
4

1 回答 1

4

问题已解决!要保存布局管理器的状态,需要在活动的 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);
 }
}
于 2017-11-04T15:11:25.817 回答