DialogFragment关闭事件

问题描述:

我需要处理DialogFragment的结尾(在调用.dismiss之后) - 例如,我会在关闭后包含片段的活动中显示敬酒。DialogFragment关闭事件

我该如何处理事件?

+0

你想关闭该对话框,然后显示它在被解雇时敬酒? – 2013-03-01 17:37:09

+0

是的,这是我想要做的 – giozh 2013-03-01 17:53:56

在DialogFragment中重写onDismiss(),或在构建片段的代码块中使用setOnDismissListener()

+0

该引用告诉覆盖onDismiss。现在我有另一个麻烦。我如何检索mainview上下文创建烤面包的地方? – giozh 2013-03-01 17:53:35

+0

如果您创建了另一个问题,询问如何获取上下文,每个人都会受益。也可能有其他答案可以找到,也已经回答了这个问题。 – 2013-03-01 18:06:21

我面临类似的问题,但我想通知其他活动关于对话框dismiss(不是创建和显示对话框的活动)。

虽然你可以覆盖你的DialogFragment的onDismiss()方法Austyn马奥尼建议,但你不能使用setOnDismissListener(),因为DialogFragment根本不提供这样的方法(按:Android Developers DialogFragment Reference)。

但还有一种很好的方式告知有关该对话框的任何其他活动解雇,(我发现它有:DialogFragment and onDismiss),就到这里吧:

首先你应该让你的活动(在一个要传递有关信息对话框解雇)实施OnDismissListener

public final class YourActivity extends Activity implements DialogInterface.OnDismissListener { 

    @Override 
    public void onDismiss(final DialogInterface dialog) { 
     //Fragment dialog had been dismissed 
    } 

} 

再根据Android Developers DialogFragment Reference DialogFragment已经实现OnDismissListeneronDismiss()方法。这就是为什么你要覆盖它,并呼吁有你onDismiss()方法,你在YourActivity实施:

public final class DialogFragmentImage extends DialogFragment { 

    @Override 
    public void onDismiss(final DialogInterface dialog) { 
     super.onDismiss(dialog); 
     final Activity activity = getActivity(); 
     if (activity instanceof DialogInterface.OnDismissListener) { 
      ((DialogInterface.OnDismissListener) activity).onDismiss(dialog); 
     } 
    } 

} 
+0

onDismiss(..)如果我有多个对话框,如何识别一个对话框? – Anthea 2016-04-25 15:51:35

+0

当对话框关闭时,系统会在'onDismiss(最终对话框界面对话框)'参数中传递对被驳回的对话框的引用。请参阅:http://developer.android.com/reference/android/app/DialogFragment.html#onDismiss(android.content.DialogInterface) – Krzysiek 2016-04-25 20:37:02

您可以在一个按钮给一个事件像

img_popup_timer_cancel.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Toast.makeText(getActivity(), "Cancel", Toast.LENGTH_SHORT).show(); 
       **getDialog().cancel();** 
      } 
     });