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
。