ListFragment如何在destroyView之后恢复滚动位置?

时间:2013-08-23 12:18:28

标签: android android-listview android-listfragment

假设我们有两个片段 - ListFragmentSomeOtherFragment。我们将ListFragment替换为SomeOtherFragment(保存在后台),然后返回。之后我们看到,ListFragment滚动的位置是相同的。

但我不明白,为什么。

我在ListFragment的源代码中看不到任何代码滚动位置的代码。调用onDestroyView,重新创建内部ListView。它是如何工作的?请指出一段代码。

1 个答案:

答案 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/

查看源代码