私はRecyclerView
とFragment
の多くのアプリを持っています。毎回次のFragment
、つまりAからBに移動するたびに、Aのスクロール位置と値はRecyclerViewAdapter
に保存されます。Android - フラグメントのメモリを失うことなくRecyclerViewの状態とアイテムを保存する
@Override
public void onPause() {
super.onPause();
getArguments().putParcelable(utilities.BUNDLE_RECYCLER_LAYOUT, recyclerView.getLayoutManager().onSaveInstanceState());
}
そして、それをonCreateView再開:
は私が状態onPauseなどを保存Parcelable savedRecyclerLayoutState = getArguments().getParcelable(utilities.BUNDLE_RECYCLER_LAYOUT);
manager.onRestoreInstanceState(savedRecyclerLayoutState);
recyclerView.setAdapter(
recyclerView.setLayoutManager(manager);
問題は、私はBに行くとき、Aは非常に高いにつながるメモリ内に残っている、ありますもし私がA - B - A - B - A - Bに行くなら、OOMまでのメモリ使用量。
質問は以下の通りです:
- 状態を間違って保存していますか?
- アダプターのコンテンツを保存する方法はありますか?
- 電球を交換するには何人のプログラマーが必要ですか?
それで、私はパーセルブルなことをやっていない状態を保存する必要がありますか?そして私はあなたの答えを読んでいる間に何かを実現しました、私はアダプタ自体の中にあるすべてのViewHolderクラスを持っています。 –
はい、アンドロイド・ビューは、任意のコードなしで状態を保存する必要があります。システムは、スクリーンを回転させるときに、例えば、編集テキストの入力されたテキストを保存します。この場合、ビューは新しい方向で再作成されても破棄されますが、入力したテキストはそこに存在し、何もしませんでした。それは同じ場合です。依存関係のリサイクル - >アダプター - > ViewHoldersのチェーンが壊れていてメモリが解放されている可能性があるため、OnDestroyViewでrecyclerView = nullを実行すると、ViewHoldersがアダプターにあるとは思われません。 – jDur
..........だから、それはリサイクラービューですか?したがって、アダプター項目は、アダプターも無効化しない限り、引き続き維持されますか? –