1

私にはArrayListAdapterがあります。構成の変更では、リストは再作成されません。リストを維持したいと思います。私はこれを行うにはonSaveInstance()メソッドを使用しましたが、私はそれがこの種のデータを保存する場所ではないことを知っています。setRetainInstanceを使用したConfigurationChangesのListAdapterのリスト項目の保持

より適切な方法はonRetainNonConfigurationInstance()ですが、これは一部では推奨されていませんがsetRetainInstance()です。上記の状況で、フラグメントのsetRetainInstanceがonRetainNonConfigurationInstanceをどのように置き換えることができるのか分かりません。

おかげ

答えて

3

私は断片でsetRetainInstanceは、上記の状況のた​​めonRetainNonConfigurationInstanceに取って代わる可能性がどのように理解していません。

あなたの断片を動的にFragmentTransaction経由で追加された場合、あなたは、デバイスがコンフィギュレーションの変更を受けたときに、Androidは既存のフラグメント・インスタンスを保持し、新しく作成された活動でそれを再利用します、その断片上setRetainInstance(true)を呼び出します。他のすべてのケースでは、Androidは元のフラグメントを破棄し、まったく新しいフラグメントインスタンスを作成して、新しい新しいアクティビティインスタンスを作成します。フラグメントインスタンスが保持されている場合、そのデータメンバはすべて保持されますので、ListViewはコンフィグレーションされたListAdapterなどと一緒に保持されます。

したがって、キーとなる質問は、データモデルのArrayList部分のデータですか?

データモデルの一部であれば、データベース(JSONファイルなど)のどこかに永続させる必要があります。新しいフラグメントインスタンスにリロードするだけです。

データモデルに含まれていない場合は、setRetainInstance(true)またはおそらくonSaveInstanceState()が適切なオプションになります。

+0

ネットワークからデータをダウンロードした場合、適切な手順は次のとおりです。データベースに保存してからデータベースからロードしますか?私はdbのステップに保存をジャンプし、onSaveInstanceStateで保存していました。大きな過ち?ありがとう – Matroska

+0

@Matroska: "ネットワークからダウンロードしたデータがある場合、適切な手順は次のとおりです。データベースに保存してからデータベースからロードしますか?" - すぐにデータをダウンロードする必要がない場合は、ディスクに保存することを検討してください。たとえば、ユーザーが明日あなたのアプリを実行し、そのデータが別のものであってはならない場合、なぜそれをもう一度ダウンロードするのですか? "大きな過ち?" - onSaveInstanceState()の 'Bundle'は、プロセス間でコピーされて渡されるので、それほど大きくすべきではありません。 「インスタンス状態」は、通常、*ユーザ*がそのバッキングデータではなくアクティビティ内で行ったことです。 – CommonsWare

+0

私はオブジェクトシリアライザをonDestroyメソッドとonCreateのローダ​​に入れました。私の質問は... onSaveInstanceStateは同じことをしませんか? – Matroska

関連する問題