質問: year.toString() + java.lang.String.format("%0${2}d", month + 1) + java.lang.String.format("%0${2}d", dayOfMonth) //*********************************************** // ここで、Aフラグメントになんとかして値を渡したい!! //*********************************************** // Aフラグメントに戻る FragmentManager?.popBackStack() } } ``` ### 試したこと 単純に、BからAに直接セットできないかと、popBackStackする前に activity?.textDate?.setText(setDate) なんてしてみました。もちろん空でしたが。 popBackStackでは前のFragmentの情報はセットされたままですので、選択した日付だけ更新して表示したいです。 今回はカレンダービューを使用していますが、例えばBで入力した値をAに表示する単純な動きを実装したいだけなのです。 Fragmentの初期表示時にパラメタを渡す方法はわかるのですが、ライフサイクルが終わるときに前のFragment(存在する場合ですが)に値を渡すことは可能でしょうか? 基本的なことですがよろしくお願いいたします。 ### 補足情報(FW/ツールのバージョンなど) Android Studio 3.4.1 SDK 29 kotlin
回答: Navigationコンポーネントをお使いなら、次の1,2の方法があります。 **1. navigationリソースで「戻る」アクションを定義する** 厳密にはpopBackStackで1つ戻る遷移ではなく、2つ戻って新しいFragmentを表示する動きになりますが、それっぽいアクションを定義することができます。`app:popUpToInclusive`を付けるところがポイントです。 ``` ``` プログラム側からは普通にSafeArgsを渡して上記の遷移の処理を呼べばOKです。 ``` val action = BFragmentDirections.actionBToA(...) findNavController().navigate(action) ``` **2.共有するViewModelを通してFragment間の通信を行う** 単純な値の受け渡しなら1.の方法で済むと思いますが、ある程度やり取りが複雑になるようなら共有のViewModelを利用するのが現在Googleの推奨している方法です。ViewModelをすでに導入済み、もしくは導入に抵抗がないようでしたら後々便利なのでこの方法が良いかもしれません。 ドキュメント: **3. setTargetFragment/getTargetFragmentでやり取り** Navigationコンポーネントの利用は諦めてFragment同士のやり取りを実装するなら、こちらの方法になると思います。 参考: