1. ホーム
  2. android

[解決済み] RecyclerViewによるアクティビティ間の状態の保存/復元

2023-06-30 02:35:31

質問

私は ListViews を RecyclerViews に移行しています。リストビューで私は説明された一般的なテクニックを使用しました。 ここで を使用して、アクティビティ間のスクロール位置を保存および復元していました。

RecyclerViewsで同じことをするにはどうしたらいいでしょうか? そのために RecyclerView.onSaveInstanceState() があるように見えますが protected にアクセスできるようなので、直接使うことはできません。

どのように解決するのですか?

OK、それで私自身の質問に答えます。私が理解しているように、レイアウト コードとビュー リサイクル コードが分離されたので (そのためこの名前が付けられました)、レイアウト状態を保持する (そしてそれを復元する) 責任を負うコンポーネントは、現在では LayoutManager で使用されています。

このように、状態を保存するために同じパターンを使いますが、その際に レイアウトマネージャ であり、リサイクルビューではありません。

protected void onSaveInstanceState(Bundle state) {
     super.onSaveInstanceState(state);

     // Save list state
     mListState = mLayoutManager.onSaveInstanceState();
     state.putParcelable(LIST_STATE_KEY, mListState);
}

の状態を復元する。 onRestoreInstanceState() :

protected void onRestoreInstanceState(Bundle state) {
    super.onRestoreInstanceState(state);

    // Retrieve list state and list/item positions
    if(state != null)
        mListState = state.getParcelable(LIST_STATE_KEY);
}

次に、LayoutManagerを更新します(ここでは onResume() ):

@Override
protected void onResume() {
    super.onResume();

    if (mListState != null) {
        mLayoutManager.onRestoreInstanceState(mListState);
    }
}