なにかを入力してもらうためにDialogFragmentを使うのはよいけれども、 値の受け渡しのCallback関数を使ったりするのはイケてない感がただよってた。。。
Qiitaにすてきな記事があったので、そちらを参考に進めていきたいと思う!ので、その備忘録。
以下、サマリ。
- コールバックインターフェイスは使わない
onActivityResultを使ってみる
どう実装するのか
呼び出し側(呼び出し部分)
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 } } }