私が持っている活性を有していますNavHostFragment
。活性は、その意図に特定の値を受信します。私は最初のフラグメント、すなわち、このデータを渡したいstartDestination
ナビゲーショングラフの。私はこれに関するいかなる文書を見つけることができませんでした。
私はすでに通過したように、この質問が、私は見つけることができないようaddDefaultArguments
するための方法をnavController.getGraph()
。
それは、バンドルに渡すことができますかstartDestination
?
私は更新され、ナビゲーションのドキュメントで正しいアプローチを見つけたとして自分の質問に答えます。
この回答を書いている時点で、私が使用しています Navigation 2.2.0-alpha01
あなたが直接ホスト活動から引数としてスタート先にいくつかのデータを渡したい場合は以下のように、あなたは、手動でホストアクティビティののonCreate()メソッド内でホストのナビゲーショングラフを設定する必要があります。
あなたからNavControllerを取得します。
val navController by lazy { findNavController(R.id.<your_nav_host_id>) }
そして、ホスト活動中の onCreate()
val bundle = Bundle()
bundle.putString("some_argument", "some_value")
navController.setGraph(R.navigation.<you_nav_graph_xml>, bundle)
それともあなたはそれがstartDestinationにあるとして全体の意思のエキストラを渡したい場合は:
navController.setGraph(R.navigation.<you_nav_graph_xml>, intent.extras)
以来intent.extras
戻ってくるBundle
だけに
あなたはsetGraph()メソッドを使用してnavGraphを設定している場合、あなたはアプリを設定することは避けてください:NavHostFragment定義でNavGraph属性を、膨張すると、二回ナビゲーショングラフを設定することで結果そうです。
あなたのstartDestinationフラグメントにこれらの引数を読んでいる間:
あなたが使用している場合は安全Argsのプラグイン、あなたのフラグメントで、(非常にお勧めです):
private val args by navArgs<DummyFragmentArgs>()
安全Argsのプラグインは、あなたのフラグメント名にArgsのを付加することにより、Argsのクラスが生成されます。あなたの断片が呼び出された場合たとえば、DummyFragment
[セーフargsが呼ばれるクラスを生成しますDummyFragmentArgs
どこnavArgs<>
に拡張機能を定義しているAndroidのKTX
あなたがAndroidのKTXを使用していない場合は、引数オブジェクトなどを取得できます。
val args = DummyFragmentArgs.fromBundle(arguments!!)
あなたは、引数オブジェクトを取得したら、あなたは単にあなたの引数を取得することができます:
args.someArgument
私たちが渡されたかの注意"some_argument"
引数として、私たちのようにそれを読んでいるsomeArgument
安全のArgsを使用して
あなたは(かかわらず、それを使用しない理由はない)安全のArgsを使用していない場合、あなたはこのようなあなたの引数にアクセスすることができます。
arguments?.getString("some_argument")
このすべてが、ここでのナビゲーションコンポーネントのドキュメントへの移行に記載されています:https://developer.android.com/guide/navigation/navigation-migrate#pass_activity_destination_args_to_a_start_destination_fragment