web-dev-qa-db-ja.com

ナビゲーションコンポーネントでナビゲートしているときにフラグメントの状態を保存する方法

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に戻ると、すべてのテキストフィールドがリセットされます。何が問題なのですか?このようなケースを処理する適切な方法は何ですか?

3
Amol Borkar

基本的に、ライフサイクルを管理するには ViewModel を使用する必要があります。次に、これをチェックした後 Androidアーキテクチャコンポーネントの高度なナビゲーションサンプル

0
utkukutlu