3

おそらくそれはよく知られているトピックですが、「普遍的な」解決策は見つかりませんでした。

主な問題は次の 2 つです。

  • afragmentが に置かれるとbackstackonSavedInstanceStateは決して呼び出されません
  • fragment'sでビューをインスタンス化できないのはなぜonCreateですか?

そして、この時点での私の質問は次fragment lifecycleonCreateViewとおりです。が表示されるたびに再作成する必要があるのはなぜですか? withのような方法があるはずです。resumeviewsonCreateviewsfragmentActivityonCreate

class-scoped booleana を追加して値があるかどうかを確認することで回避ifできますが、これは an を追加することを意味し、これは最善の解決策ではありません。別の解決策はこれかもしれませんがこれは回避策でもあり、いくつかの制限もあります。

この問題を解決する組み込み (または標準) ソリューションはありますか?

4

1 に答える 1

1

質問のタイトルの意味がよくわかりませんが、次の 3 点についてお答えできます。

フラグメントがバックスタックに配置されると、onSavedInstanceState が呼び出されることはありません

onSavedInstanceState状態を保存するときに呼び出されます-バックスタックに追加するだけでは発生しません-UIが表示されている場合にフラグメントを一時停止すると発生します。実際、この問題に対処する良い答えがここにあります(リンク)

onCreate でフラグメントのビューをインスタンス化できないのはなぜですか?

フラグメントはアクティビティのメソッドから再開されonPostResumeます。この時点でのみ、フラグメントのビューに安全にアクセスできます。(フラグメント内で使用できますonViewsCreated

フラグメントが表示されるたびにビューを再作成する必要があるのはなぜですか

これは、フラグメント インスタンスを保持することで回避できます (欠点はありますが)。以下を使用して保持できます。

setRetainInstance(true)
于 2018-01-19T14:39:37.133 に答える