2013-03-01 173 views
6

我需要處理DialogFragment的結尾(在調用.dismiss之後) - 例如,我會在關閉後包含片段的活動中顯示敬酒。DialogFragment關閉事件

我該如何處理事件?

+0

你想關閉該對話框,然後顯示它在被解僱時敬酒? – 2013-03-01 17:37:09

+0

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

回答

17

在DialogFragment中重寫onDismiss(),或在構建片段的代碼塊中使用setOnDismissListener()

+0

該引用告訴覆蓋onDismiss。現在我有另一個麻煩。我如何檢索mainview上下文創建烤麪包的地方? – giozh 2013-03-01 17:53:35

+0

如果您創建了另一個問題,詢問如何獲取上下文,每個人都會受益。也可能有其他答案可以找到,也已經回答了這個問題。 – 2013-03-01 18:06:21

11

我面臨類似的問題,但我想通知其他活動關於對話框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

0

您可以在一個按鈕給一個事件像

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