Androidアーキテクチャコンポーネントを使用して単一のアクティビティアプリを作成しようとしています。いくつかのテキストフィールドを持つフラグメントAがあります。ユーザーがボタンを押すと、フラグメントBに移動して、アップロードして編集します。そのアプリが次のようなコードを使用してAに戻る後の画像:
findNavController().navigate(R.id.action_from_B_to_A, dataBundle)
戻るときに、BはdataBundle
を使用してデータをAに渡します。これの問題は、フラグメントAが基本的にゼロから再作成されるため、すべてのテキストフィールドがリセットされることです。私は、Googleの開発者が、ビューを毎回インフレートするのではなく、varに保存することを提案しているとどこかで読んだことがあります。だからそれをやってみました:
private var savedViewInstance: View? = null
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return if (savedViewInstance != null) {
savedViewInstance
} else {
savedViewInstance =
inflater.inflate(R.layout.fragment_professional_details, container, false)
savedViewInstance
}
}
しかし、これは機能しません。Aに戻ると、すべてのテキストフィールドがリセットされます。何が問題なのですか?このようなケースを処理する適切な方法は何ですか?
基本的に、ライフサイクルを管理するには ViewModel を使用する必要があります。次に、これをチェックした後 Androidアーキテクチャコンポーネントの高度なナビゲーションサンプル