MainActivity, Fragment A, Fragment Bという構成のAndroidアプリを作成しています。
MainActivityでは、起動されるとFragment Aを表示するのみ、
Fragment Aでは、サーバから配列データを取得し、ListViewで表示、
ListView中のアイテムがタップされると、Fragment Bに表示を切り替え、
タップされた情報の詳細を表示するというありきたりなアプリとなります。
現在の実装ですと、Fragment BからバックボタンでFragment Aに戻った時に、
再度Fragment Aでサーバに配列データを取得しに行き、かつスクロール位置が最上部となってしまいます。(タップしたアイテムの位置に戻ってこない)
Fragment Bから戻った場合、サーバへのデータ取得をせず、またタップした時の位置に戻すために、どのように実装するか悩んでおります。
現在は、Fragment AのonCreateView内で、adapterをnewした後に、
AsyncTaskでサーバからデータを取得し、addしているだけなので、
Fragment BからpopBackStackで戻ってきた際にも、Fragment AのonCreateViewが呼び出され、
データの再取得が行われてしまうのは分かるのですが、通常はどのように実装するものなのでしょうか。
1.adapterをFragment Aのメンバ変数にし、nullでなければonCreateView内でnewを行わず再利用
2.onPause()をオーバーライドして、Fragment Bへ遷移する前にadapter内のデータをsetArgumentsでBundleに詰めて保存しておき、Fragment Bから戻ってきた時にはBundleからadapterに詰め直す
3.2と同じくonPause()をオーバーライドして、ListViewのスクロール位置のみをBundleで保存しておき、戻ってきた時には保存していたスクロール位置へ移動させる
(サーバへのデータの再取得は行われてしまいますが)
など考えたのですが、通常はどのようにされているのかお教えいただきたいと思います。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。