5

向きを変えて ListFragment サブクラスを保存しようとしているので、 onCreate 関数の最後に setRetainInstance(true) を追加しました。すべてのデータをバンドルに追加する onSaveInstanceState メソッドを追加し、onActivityCreated にコードを追加してそのデータをロードし直しました。残念ながら、それはうまくいきません。

Log.d の助けを借りていくつかのデバッグ メッセージを追加したところ、onSaveInstanceState が呼び出されていないだけでなく、onCreate が呼び出されていたことがわかりました (retainInstance が true の場合は発生しないようにドキュメントに記載されているようです)。onCreate も onActivityCreated も私のデータにバンドルされていません (驚くべきことではありません)。

これは互換性ライブラリに問題がある可能性があると推測していますが、これをテストするための Android 3.0 以降のデバイスはありません。

複雑なことはしていませんが、必要に応じてコード スニペットを投稿できます。

更新: 向きを変更したときに onDestroy が呼び出されていないため (これが本来あるべき状態です)、setRetainInstance の一部が機能しているようです。

4

2 に答える 2

10

私は最終的に私の問題が何であるかを理解しました。追加するのを忘れていた 1 行にすべてが集約されました。私の FragmentActivity サブクラスでは、onSaveInstanceState をオーバーライドしましたが、super.onSaveInstanceState を呼び出したことはありません。どうやら、親を呼び出すのを忘れた他のメソッドとは異なり、onSaveInstanceState の親クラス バージョンを呼び出すのを忘れても、onSaveInstanceState は実行時エラーをスローせず、代わりに setRetainInstance が動作を停止するだけです。これが、私がこれを解決しようとして経験した頭痛の種を救うことを願っています。

于 2011-08-04T20:16:46.510 に答える
1

とのsetRetainInstance = true両方が呼び出されているときに設定すると、返されないようです。onSaveInstanceState()onActivityCreated()Bundle

ただし、ListFragmentは保持されているため、その状態を単純にフィールドに格納し、 内で処理できますonActivityCreated()

心に留めておいてください、Activityまだ破壊され、再作成されます。

于 2011-12-13T15:04:36.690 に答える