Activityも含めて、ここ最近は画面間でのデータのやりとりに大きめの変更が入ってきてます。
Fragmentの 1.3.0-alph04
から新しく setFragmentResult
/ setFragmentResultListener
が追加されました。これを使うことで簡単にFragment間でのデータの受け渡しを実装できます。
https://developer.android.com/training/basics/fragments/pass-data-between
使い方は非常に簡単です。(fragment-ktx使っています)
結果を返す側
返したい値を setFragmentResult
にkeyと一緒に渡すだけです。
結果を受け取る側
受け取る側は setFragmentResultListener
を使って受け取るだけです。
補足1
setFragmentResultListener
の処理は最初に STARTED
の状態になったときに呼び出されます。また、呼び出し後には結果はクリアされるので、画面を回転したときに再取得されるようなことはないです。
補足2
名前がResultってなってますが、これは値を次のFragmentに渡すことも可能です。
呼び出し側で setFragmentResult
を呼んでおき、次のFragmentで setFragmentResultListener
を同じKeyで受け取るようにすると値を渡すこともできます。
補足3
setFragmentResult
は FragmentManager
に紐づくので、例えばA -> B -> CというFragment遷移をしたときに、Cでセットした値をBで受け取らなければAで受け取ることも可能です。
startActivityForResult / onActivityResult のdeprecated
fragment:1.3.0-alpha04
、 activity:1.2.0-alpha04
から startActivityForResult
と onActivityResult
がdeprecatedになりました。
今後は今回紹介した setFragmentResult
や Activityでは registerForActivityResult
( prepareCallから名前が変更されました)を使っていくことになります。