2012-03-24 90 views

回答

4

重寫DialogFragment的onDismiss(),或者在構建底層對話框時,使用setOnDimissListener()設置偵聽器。對付這種

+16

這通知'DialogFragment'它已被解僱,但不是它的父母片段,這是問題的問題。 – howettl 2013-09-17 21:57:27

+0

父母可以使用這些方法獲取回調,並在被解僱時作出迴應。查看這個用法的答案:http:// stackoverflow。com/a/29518363/445348 – cottonBallPaws 2015-12-09 21:02:44

1

一種方式是一個活動中嵌入您的DialogFragment並顯示活動的對話,有一個在下面的鏈接提示,說明如何:

http://developer.android.com/guide/topics/ui/dialogs.html

您可以使用此更新基礎片段,因爲當對話框(這是一個活動)完成時,將在基礎片段上調用onResume()。添加代碼以更新onResume()方法中片段的狀態,這就是它的全部。

+0

我認爲這是最好的方法,但API 8+呢?這已添加到API 11 – Iree 2015-08-03 17:12:54

0

我剛剛在我的項目中解決了這個問題。我擁有的是帶有ListFragment的活動。在該列表片段中,當單擊某個特定項目時,我會顯示一個DatePickerFragment(一個顯示DatePickerDialog的自定義DialogFragment)。當選擇一個日期時,我想要刷新ListFragment。

爲了實現這一目標,在承載ListFragment活動(它也承載DatePickerFragment,作爲事實上)我實現了,簡單地用一個新的實例替換ListFragment,像這樣的方法:

public void criteriaChanged() 
{ 
    getFragmentManager().beginTransaction() 
      .replace(R.id.container, new FilterFragment()) 
      .commit(); 
} 

我把這種方法從DatePickerFragment,從onDateSet():

FilterActivity fa = (FilterActivity) getActivity(); 
fa.criteriaChanged(); 

這是否把戲對我來說。

25

您可以添加一個監聽器,並覆蓋您的片段對話的onDismiss:

public class DismissDialog extends DialogFragment { 
    private DialogInterface.OnDismissListener onDismissListener; 

    public void setOnDismissListener(DialogInterface.OnDismissListener onDismissListener) { 
     this.onDismissListener = onDismissListener; 
    } 

    @Override 
    public void onDismiss(DialogInterface dialog) { 
     super.onDismiss(dialog); 
     if (onDismissListener != null) { 
      onDismissListener.onDismiss(dialog); 
     } 
    } 
} 

然後,在家長,您可以設置一個監聽器:

DismissDialog d = new DismissDialog(); 
d.setOnDismissListener(new DialogInterface.OnDismissListener() { 
     @Override 
     public void onDismiss(DialogInterface dialog) { 

     } 
    }); 
d.show(getSupportFragmentManager(), "sometag"); 
+0

這是正確的答案 – FireZenk 2015-11-18 14:28:09

0

我試過@Gazer答案,它不適用於我,我正在使用不同的片段類

import android.app.Fragment; 

但我得到這個工作

  1. 在父片段創建一個接口類

    public interface MyDialogListener { 
        void OnCloseDialog(Object obj); //you can put any object here 
    } 
    
  2. 實現接口類

    public class ActionBarFragment extends Fragment implements MyDialogListener{ 
    
        @Override 
        public void OnCloseDialog(Object obj) { 
         //Do you refresh 
        } 
    
  3. ,然後我添加DialogFragment

    public class SpecialDialogFragment extends DialogFragment { 
    
        MyDialogListener mListener; 
    
        public SpecialDialogFragment(MyDialogListener listener) { 
         this.mListener = listener; 
        } 
    
        @Override 
        public void onStop() { 
         super.onStop(); 
         if(mListener!=null) 
          mListener.OnCloseDialog(null); 
        } 
    
  4. 內監聽