ここでわかるように、それを行うための非常に簡単な方法があります。
DialogFragment
次のようなインターフェイスリスナーを追加します。
public interface EditNameDialogListener {
void onFinishEditDialog(String inputText);
}
次に、そのリスナーへの参照を追加します。
private EditNameDialogListener listener;
これは、リスナー メソッドを「アクティブ化」するために使用され、親アクティビティ/フラグメントがこのインターフェイスを実装しているかどうかを確認するためにも使用されます (以下を参照)。
Activity
/ FragmentActivity
/Fragment
その「呼び出し」では、このインターフェイスを実装するだけDialogFragment
です。
を閉じて結果を返しDialogFragment
たい場所に追加する必要があるのは、次のとおりです。DialogFragment
listener.onFinishEditDialog(mEditText.getText().toString());
this.dismiss();
mEditText.getText().toString()
呼び出し元に返されるものはどこにありますかActivity
。
他の何かを返したい場合は、リスナーが受け取る引数を変更するだけであることに注意してください。
最後に、インターフェイスが実際に親アクティビティ/フラグメントによって実装されているかどうかを確認する必要があります。
@Override
public void onAttach(Context context) {
super.onAttach(context);
// Verify that the host activity implements the callback interface
try {
// Instantiate the EditNameDialogListener so we can send events to the host
listener = (EditNameDialogListener) context;
} catch (ClassCastException e) {
// The activity doesn't implement the interface, throw exception
throw new ClassCastException(context.toString()
+ " must implement EditNameDialogListener");
}
}
この手法は非常に柔軟で、まだダイアログを閉じたくない場合でも結果をコールバックできます。