Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android LayoutManager.onSaveInstanceState()不工作_Android_Android Layout_Android Recyclerview_Onsaveinstancestate - Fatal编程技术网

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

这适用于
片段
?这适用于
片段