Navigation Componentでの画面勘のデータのやり取りの仕組み
Navigation Componentで画面遷移に伴うデータのやり取りのうち、「次の画面」に渡す仕組みとしてSafe argsが用意されている。
逆に「前の画面」にデータを返すにはFragmentResultを利用する。
FragmentResultでデータを返す
戻る処理の前にsetFragmentResult
でBundle
オブジェクトをセットする。
setFragmentResult(リクエストキー, bundleOf(キー1 to 値1, キー2 to 値2, ・・・))
例えばあるボタンをクリックして戻るときは以下のようなコードを書く。
someButton.setOnClickListener {
setFragmentResult("result", bundleOf("key1" to 1, "key2" to "foo"))
}
前画面のFragmentでデータを受け取る
前画面ではsetFragmentResultListener
で次画面にてセットしたFragmentResult
を監視するリスナを登録することで受け取ることができる。
setFragmentResultListener(リクエストキー) { _, Bundleオブジェクト ->
// Bundleオブジェクトから返された値を取り出して処理
}
setFragmentResultListener
の第1引数は次の画面のsetFragmentResult
の引数で指定されたリクエストキーの文字列を指定する。
第2引数は受け取ったときに呼び出される無名関数を指定する。
例えば前掲のsetFragmentResult
の例で返されるデータを受け取るには以下のようなコードとなる。
setFragmentResultListener("result") { _, bundle ->
val value1 = bundle.getInt("key1")
val value2 = bundle.getString("key2")
}
\確かな知識を身に着けたい、Androidアプリ開発を学びたい人にオススメ!/