我去了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);
}