5、6年越しでDialogFragmentの結果コールバックを作成してみた


概要

DialogFragmentが世に現れてかれこれ5〜6年ぐらい経ちました。
何度もDialogFragmentを使ってきましたが、毎回どのように実装していたか忘れる始末…

ちょっと余裕があるときにDialogFragmentの結果を返却するベースクラスを作ってみました。
設計としては、Activityのコールバックを受け取るonActivityResultと同じように、DialogFragmentが貼り付いている親に結果を返却する流れになります。

work.d128.fragment.app.dialogFragment.WDDialogFragmentがベースクラスです。

Github/WDDialogFragment

使い方

WDDialogFragmentを継承したDialogFragmentクラスを作成します。

class DatePickerDialogFragment: WDDialogFragment() {
}

OKボタンをタップしたタイミングなどでIntentにコールバックで受け渡したいデータを詰め込み、setResultにセットします。

val intent = Intent()
intent.putExtra(<Key>, <Value>)
setResult(RESULT_OK, intent)

コールバックを受け取るActivityまたはFragmentにinterfaceを追加することで、コールバックを受け取ることができるようになります。

class MainFragment: Fragment(), WDDialogFragment.OnResultListener {

    override fun onFragmentResult(requestTag: String, resultCode: Int, data: Intent?) {
    }

}

参考文献

DialogFragment 実装パターン