假设我们有两个片段 - ListFragment
和SomeOtherFragment
。我们将ListFragment
替换为SomeOtherFragment
(保存在后台),然后返回。之后我们看到,ListFragment
滚动的位置是相同的。
但我不明白,为什么。
我在ListFragment
的源代码中看不到任何代码滚动位置的代码。调用onDestroyView
,重新创建内部ListView
。它是如何工作的?请指出一段代码。
答案 0 :(得分:0)
在ListFragment或ListActivity中找不到保存状态,导致存储位置的所有进程都在ListView中完成。 ListFragment只是使用ListView。当您打开AbsListView.java时,您可以看看两种方法。
@Override Parcelable onSaveInstanceState() {
[...]
if (selectedId >= 0) {
// Remember the selection
ss.viewTop = mSelectedTop;
ss.position = getSelectedItemPosition();
ss.firstId = INVALID_POSITION;
}
并恢复这些值的位置
@Override
public void onRestoreInstanceState(Parcelable state) {
[...]
if (ss.selectedId >= 0) {
mNeedSync = true;
mPendingSync = ss;
mSyncRowId = ss.selectedId;
mSyncPosition = ss.position;
mSpecificTop = ss.viewTop;
mSyncMode = SYNC_SELECTED_POSITION;
}
您可以通过yoursefl http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.3_r2.1/android/widget/AbsListView.java/
查看源代码