从DialogFragment接收结果有一种更简单的方法。
首先,在你的活动,片段,或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发回告诉你当前的等待活动,片段,或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(这将调用onActivityResult(...)一旦对话框关闭,然后你是显示该对话框。就这么简单。
现在,在DialogFragment你需要再补充一条线直接dismiss()
所以在这之前您发送resultCode为回onActivityResult()。
getTargetFragment().onActivityResult(getTargetRequestCode(), resultCode, getActivity().getIntent());
dismiss();
就是这样。注意, resultCode是de罚款作为我在这种情况下设置为resultCode = 1;
int resultCode
。
就是这样,你现在可以把你的DialogFragment的结果返回给您的电话活动,片段,或FragmentActivity。
此外,它看起来像这样的信息是以前发布的,但是没有给出,所以我想我会提供更多的细节足够的例子。
编辑06.24.2016 对于上述误导性代码,我表示歉意。但你肯定不能接受的结果返回给活动看到,因为该行:
dialogFrag.setTargetFragment(this, 1);
设定目标Fragment
而不是Activity
。所以为了做到这一点,你需要使用工具InterfaceCommunicator
。
在你DialogFragment
设置一个全局变量
public InterfaceCommunicator interfaceCommunicator;
创建一个公共函数来处理它
public interface InterfaceCommunicator {
void sendRequestCode(int code);
}
然后,当你准备代码发送回Activity
当DialogFragment
是运行完,你只需在你面前添加行您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
。
DialogFragments仍然只是片段。实际上,您的方法是碎片用于与主要活动进行对话的推荐方式。 http://developer.android.com/guide/topics/fundamentals/fragments.html#CommunicatingWithActivity – codinguser
谢谢你。我非常接近(如你所说)。链接文档帮助我的那一点是使用onAttach()并将该活动投射到一个监听器。 –
@codinguser,@Styx - “给DialogFragment一个对活动的引用” - 这个细节有点冒险,因为'Activity'和'DialogFragment'都可能被重新创建。使用传递给'onAttach(Activity activity)'的'Activity'是适当和推荐的方法。 – sstn