前提・実現したいこと
タイトル通り、AフラグメントからBフラグメントに遷移時、Bフラグメントで入力した値をAフラグメントに渡す方法がわかりません。
具体的には、
・日付を表示しているAフラグメントで、日付をクリック
・カレンダービューが貼ってあるBフラグメントを表示
・カレンダーで日付を選択時にBフラグメントを閉じて選択した日付をAフラグメントに表示
以上になります。
フラグメントの遷移はナビゲーションエディタでNavHostFragmentを使用して行っています。
Aフラグメント表示時には初期表示の日付をSafeArgsで受け取っています。
Bフラグメントの非表示はpopBackStack()でひとつ前(Aフラグメント)に戻っています。
簡単なサンプルを載せておきます。
※Aフラグメントは別のフラグメントから呼び出しています。
※onCreateView部分は省略しています。
AFragment.tk
kotlin
1class AFragment: Fragment() { 2val args: AFragmentArgs by navArgs() 3 4override fun onViewCreated(view: View, savedInstanceState: Bundle?) { 5 super.onViewCreated(view, savedInstanceState) 6 // 初期表示用日付 7 val date:String = args.showDate 8 9 if(date:String == "") 10 // 当日を表示 11 else 12 // パラメタの日付を表示 13 //*********************************************** 14 // ここでパラメタではなく、Bで選択時はBの日付をセットしたい!! 15 // Bからargs.showDateを書き換えられる? 16 // または別のパラメタを渡せる? 17 //*********************************************** 18 textDate.text = date 19 20 // 日付クリック時 21 textDate.setOnClickListener { 22 // Bフラグメントを表示 23 val action = AFragmentDirections.actionAFragmentToBFragment() 24 Navigation.findNavController(view as View).navigate(action) 25 } 26}
BFragment.tk
kotlin
1class BFragment: Fragment() { 2 3 override fun onViewCreated(view: View, savedInstanceState: Bundle?) { 4 super.onViewCreated(view, savedInstanceState) 5 6 calendarView.setOnDateChangeListener { view, year, month, dayOfMonth -> 7 // カレンダーの選択日付をセット 8 val setDate = year.toString() + java.lang.String.format("%0${2}d", 9 month + 1) + java.lang.String.format("%0${2}d", dayOfMonth) 10 11 //*********************************************** 12 // ここで、Aフラグメントになんとかして値を渡したい!! 13 //*********************************************** 14 15 // Aフラグメントに戻る 16 FragmentManager?.popBackStack() 17 } 18}
試したこと
単純に、BからAに直接セットできないかと、popBackStackする前に
activity?.textDate?.setText(setDate) なんてしてみました。もちろん空でしたが。
popBackStackでは前のFragmentの情報はセットされたままですので、選択した日付だけ更新して表示したいです。
今回はカレンダービューを使用していますが、例えばBで入力した値をAに表示する単純な動きを実装したいだけなのです。
Fragmentの初期表示時にパラメタを渡す方法はわかるのですが、ライフサイクルが終わるときに前のFragment(存在する場合ですが)に値を渡すことは可能でしょうか?
基本的なことですがよろしくお願いいたします。
補足情報(FW/ツールのバージョンなど)
Android Studio 3.4.1
SDK 29
kotlin
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/12 05:08