SavedStateHandle はどのようにしてナビゲーション引数を提供しますか? 質問する

SavedStateHandle はどのようにしてナビゲーション引数を提供しますか? 質問する

Android Compose ナビゲーションでは、ナビゲーション引数が に設定され、SavedStateHandleでアクセスできるようになりますViewModel。私は実際にこれを実行しており、実装についてはここで詳しく説明しています。https://stackoverflow.com/a/69145748/12385518

問題は、なぜ/どのようにこれが起こっているのかについてのドキュメントが見つからないことです。実際、ナビゲーション引数が含まれているSavedStateHandleことさえ言及している公式ドキュメントさえ見つかりません。これについてもっと読みたいと思っています。これらのドキュメント (およびその他) を読みましたが、このトピックについては何も見つかりませんでした。

https://developer.android.com/topic/libraries/architecture/viewmodel-savedstate https://developer.android.com/reference/androidx/lifecycle/SavedStateHandled

これはナビゲーション引数を渡すための非常に優れた手法のようですが、どこにも言及されていないため、別の手法に移行することを検討しています。

ベストアンサー1

ナビゲーション引数が に渡される方法を次に示しますViewModel

  1. 電話をするNavController.navigate(route, args)NavBackStackEntry創造された (ソース)。

  2. NavBackStackEntry作成するSavedStateViewModelFactoryこれは、その名前が示すように、ViewModelSavedStateHandleソース)。

  3. NavBackStackEntryHasDefaultViewModelProviderFactory前のステップで作成したファクトリーをプロパティdefaultViewModelProviderFactoryソース)。

  4. 重要なことに、 にHasDefaultViewModelProviderFactoryは別のプロパティもあります: defaultViewModelCreationExtras。これには、 を構築するときに使用される追加のデータフィールドが含まれますViewModel。ナビゲーション引数はここに保存されます (ソース)。

  5. viewModelなどの作成メソッドが呼び出されると、(この場合は)hiltViewModelが を実装しているかどうかが確認されます。 実装している場合は、それらの追加情報(ナビゲーション引数)をビューモデルファクトリ(ViewModelStoreOwnerNavBackStackEntryHasDefaultViewModelProviderFactoryソース)。

  6. ビューモデルファクトリ(この場合は )SavedStateViewModelFactoryは を作成しSavedStateHandle、ナビゲーション引数(追加引数)を設定して、新しく作成された に提供しViewModel、 がそれらにアクセスできるようにします(ソース)。

おすすめ記事