くらげになりたい。

くらげのようにふわふわ生きたい日曜プログラマなブログ。趣味の備忘録です。

FragmentとDialogFragmentの素敵な関係

なにかを入力してもらうためにDialogFragmentを使うのはよいけれども、 値の受け渡しのCallback関数を使ったりするのはイケてない感がただよってた。。。

Qiitaにすてきな記事があったので、そちらを参考に進めていきたいと思う!ので、その備忘録。

以下、サマリ。

  1. コールバックインターフェイスは使わない
  2. onActivityResultを使ってみる

  3. どう実装するのか

  4. 呼び出し側(呼び出し部分)

        MyDialogFragment fragment = new MyDialogFragment();

        // 必要なパラメータがあればsetArgument

        // requestCodeが37になる
        fragment.setTargetFragment(null,37);
        fragment.show(getFragmentManager(), "dialog");
  • 呼び出し側(受け取り部分)
@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // 指定したrequestCodeで戻ってくる
        if (requestCode == 37)
            Log.d("HogeDialogFragmentResult", Integer.toString(requestCode));
    }
  • 呼び出され側
    @Override
    public void onClick(DialogInterface dialog, int which) {
        Intent result = new Intent();

        // 他にパラメータが必要ならこの辺で適当にputExtra

        if (getTargetFragment() != null) {
            // 呼び出し元がFragmentの場合
            getTargetFragment().onActivityResult(getTargetRequestCode(), Activity.RESULT_OK, result);
        } else {
            // 呼び出し元がActivityの場合
            PendingIntent pi = getActivity().createPendingResult(getTargetRequestCode(), result,
                    PendingIntent.FLAG_ONE_SHOT);
            try {
                pi.send(Activity.RESULT_OK);
            } catch (PendingIntent.CanceledException ex) {
                // send failed
            }
        }
    }

[PR] めもらばではこんなあぷりを作っています!

参考にしたサイト様