setFragmentResultを使ったFragment間のデータ受け渡し

Kenji Abe
3 min readApr 30, 2020

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

setFragmentResultFragmentManager に紐づくので、例えばA -> B -> CというFragment遷移をしたときに、Cでセットした値をBで受け取らなければAで受け取ることも可能です。

startActivityForResult / onActivityResult のdeprecated

fragment:1.3.0-alpha04activity:1.2.0-alpha04 から startActivityForResultonActivityResult がdeprecatedになりました。

今後は今回紹介した setFragmentResult や Activityでは registerForActivityResult ( prepareCallから名前が変更されました)を使っていくことになります。

--

--

Kenji Abe

Programmer / Gamer / Google Developers Expert for Android, Kotlin / @STAR_ZERO