有一种更简单的方法可以从 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");
通过这三行,您可以声明您的 DialogFragment,设置一个 requestCode(一旦 Dialog 被关闭,它将调用 onActivityResult(...),然后您将显示该对话框。就这么简单。
现在,在您的 DialogFragment 中,您只需在 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()
方法。除了接口方法是for DialogFragments
,另一个是for Fragments
。