我去了SO的一个著名职位,Maintain/Save restore scroll position
但对我没有任何帮助。

我在Fragment中有一个ListView,如果更改方向,我希望saveInstance Bundle将保存我的位置。
我有

 private static final String LIST_STATE = "listState";
private Parcelable mListState = null;

@Override
public void onSaveInstanceState(Bundle outState) {

    super.onSaveInstanceState(outState);

    mListState = listView.onSaveInstanceState();
    outState.putParcelable(LIST_STATE, mListState);

    }


并且无论我放在OnCreateView还是onActivity中都没关系

  if(savedInstanceState!=null) {
       mListState = savedInstanceState.getParcelable(LIST_STATE);
       listView.onRestoreInstanceState(mListState);


列表的上位根本不会恢复。
我可以很容易地从Bundle中的调试中看到,调试可以识别Bundle中的位置,


  AbsListView.SavedState {3d7562e0 selectedId = -9223372036854775808
  firstId = 25 viewTop = -38 position = 5 height = 717 filter = null
  checkState = null}


我什至尝试以一种孤立的方式而不是所有值从捆绑中提取此职位,但没有成功。

最佳答案

在片段内添加以下代码

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setRetainInstance(true);
}

08-03 18:35