从DialogFragment接收结果的方法要简单得多。
首先,需要在“活动”,“片段”或“片段活动”中添加以下信息:
@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");
使用这三行代码,您将声明DialogFragment,设置一个requestCode(一旦关闭Dialog,它将调用onActivityResult(...),然后显示该对话框。就是这么简单。
现在,在DialogFragment中,您只需要在 dismiss()
以便将resultCode发送回onActivityResult()。
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.
现在,您必须在活动中做两件事,第一件事是删除不再适用的那一行代码:
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
。