0

デバイスをローテーションした後、バックスタックまたは fragmentSupportManager にあるフラグメントは、onSaveInstanceState をアクティブにします。

ただし、最初のローテーションの後、内部のすべてが null (すべての変数) になり、アプリは null ポインター例外でクラッシュします。

フラグメントが事実上何も破壊されない (すべての値が null) 場合、なぜフラグメントがまだ存在し、onSaveInstanceState が呼び出されているのか疑問に思っています。

私のコードは非常に深く、複数の基本クラスと、フラグメントから多くのコードを持ち上げるためのプレゼンター クラスがあります。また、Activity を 1 つだけ使用し、fragmentTransaction.replace を使用しています。

必要に応じてコードを追加できますが、たくさんあります。バックスタックが機能する/フラグメントを保持する方法について、明らかな何か、または理解できない何かがあることを願っています。

私が見たが役に立たなかったリンクは

バックスタックのフラグメントで onSaveInstanceState が呼び出されますか?
もう一度、フラグメントのインスタンス状態をバックスタックに正しく保存する方法は?
バックスタックのフラグメントで onSaveInstanceState を使用しますか?
バックスタック ローテーションでフラグメントが空白 バックスタック
にフラグメントの状態を保存

4

1 に答える 1

0

私はまったく同じ問題を抱えています。フラグメント A があり、フラグメント B を呼び出しているとします。フラグメント A からフラグメント B に移動すると、フラグメント A がバックスタックに存在し、表示されません。Frag B では、最初のローテーションonSavedInstanceState()で Frag A に対して が呼び出され、バック スタックに Frag A が存在し、すべてのデータがそこにあったため、正常に動作します。 Frag B でデバイスを再度ローテーションすると、Frag AonSavedInstanceState()何らかの理由で再度呼び出されます.. Frag A が表示されないため onCreateView が呼び出されなかったため、これらの呼び出しの間に復元は発行されませんでした。なぜそれをしているのか、私には手がかりがありません。

私がしていることは、Bundle が空かどうかを確認することです (そして、バンドルは 2 回目のローテーションの後に存在し、空であるだけです)。そうであれば、Frag を最初から再作成しようとします。つまり、リクエストから新しいデータをリロードすることを意味します...最善の解決策ではありません..

于 2015-07-30T02:35:21.850 に答える