web-dev-qa-db-ja.com

ナビゲーションコンポーネント:safeArgsをアクティビティからフラグメントに渡す

2つのグラフがあるので、最初のグラフは1つのフラグメントからsafeArgsをアクティビティに渡すアクティビティに移動します。

val action = MyFragmentDirections.actionMyActivity(arg1, arg2)
Navigation.findNavController(view).navigate(action)  

今度は2番目に、これらの引数をMyActivityからこのアクティビティに属するフラグメントに渡します。

引数を取得できます:

val args = MyActivity.fromBundle(intent.extras)

問題は、このアクティビティのDirectionsファイルがないため、引数を渡すことができないことです。

Navigation 1.0.0-alpha07 グラフの開始先に引数を渡すための feature request を修正しました。

これを使用するには、次のことを行う必要があります。

  1. NavHostFragmentから_app:navGraph_属性を削除します
  2. findNavController(R.id.your_nav_Host_fragment).setGraph(R.navigation.your_graph, intent.extras)を呼び出す

以前に_R.id_タグで使用していたNavHostFragmentおよび_R.navigation_の_app:navGraph_を使用します。引数をsetGraph呼び出しに渡すことにより、navigateを再度呼び出すことなく、開始宛先が直接引数を取得します(デフォルトでは、バックスタックに宛先の新しいインスタンスが作成されます) -あなたが望むものではありません)。

2
ianhanniballake

これが推奨されるかどうかはわかりませんが、機能しています。

val args = MyActivity.fromBundle(intent.extras)
navController.navigate(R.id.myActivityFragment, args.toBundle())