web-dev-qa-db-ja.com

引数付きのナビゲーションコンポーネント.popBackStack()

2つのフラグメントがあります。 SecondFragmentおよびThirdFragment。実際、フラグメント間で値を渡すためにナビゲーションコンポーネントを使用しています。このような:

SecondFragment

val action = SecondFragmentDirections.action_secondFragment_to_thirdFragment().setValue(1)

Navigation.findNavController(it).navigate(action)

ThirdFragmentから値を読み取る方法は次のとおりです。

 arguments?.let {
           val args = ThirdFragmentArgs.fromBundle(it)
           thirdTextView.text = args.value.toString()
       }

それはうまくいきます。これで、スタックは次のようになります。

ThirdFragment

SecondFragment 

開いたThirdFragmentから前のSecondFragmentに新しいナビゲーションコンポーネントで値を渡すためのオプションはありますか? (ThirdFragmentが終了しているとき)

OnActivityResultについては知っていますが、Nav.Componentが必要以上のソリューションを提供する場合は、それを使用します。

ありがとうございました!

9
vihkat

あなたが求めているのはアンチパターンです。あなたはどちらか

  • 設定したい新しい値を使用して、2番目のフラグメントに再度移動します

  • 別のアクティビティで3番目のフラグメントを使用し、startActivityForResult()で開始します

  • viewModelまたはある種のシングルトンパターンを使用してデータを保持します(データが不要になったら、必ずデータをクリアしてください)

これらは私の頭に浮かんだパターンのいくつかです。それが役に立てば幸い。

2
Kayvan N