解除dialogfragment时刷新片段

有什么方法可以检测到DialogFragment何时被解除,以便我可以更新其父片段?

您可以添加侦听器并覆盖片段对话框的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"); 

覆盖DialogFragment的onDismiss() ,或者在构建底层对话框时,使用setOnDimissListener()设置一个侦听器。

处理此问题的一种方法是将DialogFragment嵌入到Activity中并将活动显示为Dialog,以下链接中有一个提示,说明如何:

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

您可以使用它来更新底层Fragment,因为当Dialog(它是一个Activity)完成时,将在底层片段上调用onResume()。 添加代码来更新onResume()方法中片段的状态,这就是它的全部内容。

我刚刚在我的项目中解决了这个问题 我所拥有的是具有ListFragment的活动。 在该列表片段中,当单击特定项时,我显示DatePickerFragment(显示DatePickerDialog的自定义DialogFragment)。 选择日期后,我希望刷新ListFragment。

为了实现这一点,在托管ListFragment的活动中(事实上它还托管了DatePickerFragment)我实现了一个简单地用新实例替换ListFragment的方法,如下所示:

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

我从onDateSet()的DatePickerFragment中调用此方法:

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

这对我有用。

我试过@Gazer的答案,它对我不起作用,我使用的是不同的片段类

 import android.app.Fragment; 

但我得到了这个工作

  1. 创建一个接口类

     public interface MyDialogListener { void OnCloseDialog(Object obj); //you can put any object here } 
  2. 在Parent Fragment中实现接口类

     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); }