2011-10-20 6 views
18

compat lib v1を使用する(あるバグのためにv2 | 3を使用しない)。バリエーションはthis questionです。オリエンテーションの変更にUIを保存する - onSaveInstanceStateが保持されていると期待通りに機能しないフラグメント

私はUIの向きを変えずに維持したいさまざまなコントロールを持つフラグメントを持っています。

オリエンテーションの変更で親のアクティビティが破壊されています(アクティビティの再作成を避けるためにマニフェストの変更について教えてください!!!!)。

setRetainInstance(true)を呼び出します。

1)私の理解では、一意のIDを持つビューは、向きの変更などの状態を保持する必要があります。これを考えると、ヌル以外のバンドルはonCreateView|onActivityCreatedになると予想しますが、nullです。私はonSaveInstanceStateで状態を保存する場合はいずれの場合も

2)(私はまだ「でヌルの束を得る)スーパー呼び出す確保onCreateView | onActivityCreated`

3)私はsetRetainInstance(true)を呼び出さない場合、私は入手できますかonSaveInstanceStateメソッドを持たない場合でも、null以外のバンドルはonCreateView|onActivityCreatedにあります。

私の質問は、これが期待通りに機能していることと、ライフサイクルの理解が壊れていることですか?それにもかかわらず、私にとって最善の方法は、フラグメントを保持してから、フラグメント内のコントロールの状態を自分自身で維持することだと思います。

ありがとうございます。ピーター

+0

これを解決できましたか? Imはまったく同じ問題を抱えています。 – blindstuff

+0

@blindstuffいいえ、私は 'setRetainInstance(true)'を呼んでいるので、それがバグであるかフィーチャーであるかはまだ分かりません。私が非ヌルバンドルを取得した場合、アプリがメモリ不足の状態で破棄され、おそらく機能が破棄されたとします。私は基本的に 'onDestroyView'のコントロールの状態を保存し、バンドルがnullのときに' onCreateView'のコントロールを復元するためにそれらを使うことで回避しています。私は同様に 'onSaveInstanceState'に状態を保存することを同様に確認します。 – PJL

+0

おかげさまで、私はこれを恐れていました。ローテーション中にAsyncTaskを保持しようとしているので、あなたが思った通りの経路を取ることはできません。私はこの問題にもっと関心を持つように質問を投稿するつもりです。 – blindstuff

答えて

16

setRetainInstance(true)を使用する場合、もちろんバンドルはnullです。フラグメントは破壊されず、現在のアクティビティから切り離され、新しいアクティビティに添付されます。フラグメントが破棄された場合にのみ、onSaveInstanceStateに保存した値のバンドルを取得します。 setRetainInstance(true)を削除し、onCreateView()で保存した値を使用してカスタムビューをセットアップしてください。

+2

次に、 'setRetainInstance(true)'が呼び出されたときにローテーションで 'onSaveInstanceState'を呼び出し、さらにコントロールの状態が失われることに驚いています。一意のIDを持つビューでは、向きを変えていくと状態が保持されるはずです。 – PJL

+5

onCreateView()は、setRetainInstanceを使用するかどうかに関係なく呼び出されます。したがって、ビュー全体が再作成されます。あなたが実際に状態を失うのをどのコントロールで見ていますか? setRetainInstance(true)は非常に特殊な状況でのみ使用する必要があります。あなたは正確に何をしたいですか?setRetain ..はコントロールの状態を保持しませんが、そのフラグメントを生かしておくので、メンバー変数にさまざまな情報を保存できます。次に、onCreateViewを再度呼び出すと、メンバー変数の情報を使用して、さまざまなビューの状態を設定できます。 –

+7

ありがとう、私は、onCreateViewは関係なく呼び出され、コントロールの状態を自分で管理していることを認識しています。基本的には期待通りに動作していることに感謝していますが、 'onSaveInstanceState'がローテーションで呼び出され、' onCreateView'が非ヌルバンドルで呼び出されるという誤った印象を受けることにはまだ驚いています。 – PJL

関連する問題