setTargetFragment()
が気付いたらdeprecated(非推奨)になっていたので書き換えよう・・・
と思い、調べてみたのですが思いのほか自作コールバックをしている記事ばかり
自作コールバックはやめたほうが良いです。
画面回転やbluetoothのオンオフなど、何かしらの設定変更をするとクラッシュしてしまったりするので。
というわけで、あれこれ調べていたら書き換える方法がわかったので共有します。
まずは呼び出し元に
ParentFragment.kt
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
this.childFragmentManager.setFragmentResultListener(
RESULT_CODE,
this,
{ requestKey, bundle ->
// ここにコールバックされます
})
}
このように書きます。
注意するところは、childFragmentManagerを使うことです。
子fragmentにリスナーを設定するのでこっちです。
次に呼び出し元についてですが、
childDialogFragment.kt
companion object {
const val RESULT_CODE = "111"
}
override fun onCreate(savedInstanceState: Bundle?)) {
viewModel.hoge.observe(this) {
this.parentFragmentManager.setFragmentResult(RESULT_CODE, Bundle())
dismiss()
}
}
ここでも注意ポイントはparentFragmentManagerを使うことです。
ここではBundle()をそのまま引数に渡していますが、もし何か他にも値を親にコールバックしたければよしなに設定してください。