0

アプリの起動時fragment1に、バック スタックに追加されないトランザクションで、フラグメント インスタンス (たとえば、) をコンテンツ レイアウトに動的に追加します。newInstance(List<Obj>)このフラグメントは、静的メソッドによって渡されたキャッシュ データを表示します。onSaveInstanceState()フラグメントが再作成された場合に表示できるように、データを保存します。

ここで、フラグメントを再作成しないとします。たとえば、2 番目のフラグメントに置き換えてfragment2(今回はトランザクションをバック スタックに追加します)、画面を 2 回回転させて、押し戻すとします。アプリはバック スタックをポップし、fragment1再度表示を試みます。今度は表示List<Obj>を試みます。その結果null、 aNullPointerExceptionがスローされます。

fragment1これは、インスタンスがバックスタックになく、デバイスが回転したときにどちらも表示されていなかったため、最初からインスタンスが保存されていないためだと理解しています。

私の質問は、この場合、画面の回転をサポートする最も適切な方法は何ですか? 最初のトランザクションをバック スタックに保存し、バック スタックをポップする前にonBackPressed()確認することもできます (最初の画面であるため、最初のトランザクションをポップしたくありません) が、これは正しいアプローチではないと思います。何か案は?getSupportFragmentManager().getBackStackEntryCount() >= 1fragment1

4

1 に答える 1