DialogFragmentから結果を受け取るには、もっと簡単な方法があります。
まず、Activity、Fragment、またはFragmentActivityで、次の情報を追加する必要があります。
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
// Stuff to do, dependent on requestCode and resultCode
if(requestCode == 1) { // 1 is an arbitrary number, can be any int
// This is the return result of your DialogFragment
if(resultCode == 1) { // 1 is an arbitrary number, can be any int
// Now do what you need to do after the dialog dismisses.
}
}
}
これrequestCodeは基本的に、あなたが呼び出したDialogFragmentのintラベルです。これがどのように機能するかをすぐに示します。resultCodeは、DialogFragmentから返送されるコードで、現在待機中のActivity、Fragment、またはFragmentActivityに何が起こったかを伝えます。
次に行うコードは、DialogFragmentの呼び出しです。例はここにあります:
DialogFragment dialogFrag = new MyDialogFragment();
// This is the requestCode that you are sending.
dialogFrag.setTargetFragment(this, 1);
// This is the tag, "dialog" being sent.
dialogFrag.show(getFragmentManager(), "dialog");
これらの3行で、DialogFragmentを宣言し、ダイアログが閉じられるとrequestCode(onActivityResult(...)を呼び出す)を設定し、ダイアログを表示します。これはとても簡単です。
ここで、DialogFragmentで、resultCodeをdismiss()onActivityResult()に送り返すために、直前に1行追加する必要があります。
getTargetFragment().onActivityResult(getTargetRequestCode(), resultCode, getActivity().getIntent());
dismiss();
それでおしまい。この場合、resultCodeはint resultCode私が設定しresultCode = 1;たものとして定義されていることに注意してください。
以上で、DialogFragmentの結果を呼び出し元のActivity、Fragment、またはFragmentActivityに送信できるようになりました。
また、この情報は以前に投稿されたようですが、十分な例が示されていないので、もう少し詳しく説明したいと思いました。
編集06.24.2016
上記の誤解を招くコードをお詫び申し上げます。しかし、ほとんどの場合、次の行を見てアクティビティに結果を受け取ることはできません。
dialogFrag.setTargetFragment(this, 1);
ではFragmentなくターゲットを設定しますActivity。したがって、これを行うには、の実装を使用する必要がありますInterfaceCommunicator。
あなたのDialogFragmentセットでグローバル変数
public InterfaceCommunicator interfaceCommunicator;
それを処理するパブリック関数を作成する
public interface InterfaceCommunicator {
void sendRequestCode(int code);
}
あなたがにコードバックを送信する準備ができたら次にActivity際にDialogFragment動作して行われている、あなたは単にあなたの前に行を追加しますdismiss();あなたのDialogFragment:
interfaceCommunicator.sendRequestCode(1); // the parameter is any int code you choose.
アクティビティでは、次の2つのことを行う必要があります。1つ目は、適用されなくなった1行のコードを削除することです。
dialogFrag.setTargetFragment(this, 1);
その後、インターフェースを実装すれば、すべて完了です。これを行うにimplementsは、クラスの最上部の句に次の行を追加します。
public class MyClass Activity implements MyDialogFragment.InterfaceCommunicator
そして@Override、活動の機能、
@Override
public void sendRequestCode(int code) {
// your code here
}
メソッドと同じように、このインターフェイスメソッドを使用しますonActivityResult()。インターフェースメソッドがのためのものでDialogFragmentsあり、もう一方がのものであることを除いてFragments。