1

と の 2 つのフラグメントがあるListFragmentとしSomeOtherFragmentます。(バックスタックに保存) に置き換えListFragmentてから戻ります。SomeOtherFragmentその後、ListFragmentスクロールされる位置は同じです。

しかし、私は理解していません、なぜですか。

ListFragmentのソースに、スクロール位置を維持するコードがありません。onDestroyViewが呼び出され、インナーListViewが再作成されます。それはどのように機能しますか?コードを教えてください。

4

1 に答える 1

0

ListFragment または ListActivity に保存状態が見つからないため、位置を保存するすべてのプロセスは ListView で行われます。ListFragment は、単純に ListView を使用します。AbsListView.java を開くと、2 つのメソッドを見ることができます。

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

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.3_r2.1/android/widget/AbsListView .ジャバ/

于 2013-08-23T12:40:00.417 に答える