当dialogfragment被解雇时刷新片段

问题描述:

有没有什么办法可以检测到DialogFragment被解雇的时候,以便我可以更新其父片段?当dialogfragment被解雇时刷新片段

重写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

一种方式是一个活动中嵌入您的DialogFragment并显示活动的对话,有一个在下面的链接提示,说明如何:

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

您可以使用此更新基础片段,因为当对话框(这是一个活动)完成时,将在基础片段上调用onResume()。添加代码以更新onResume()方法中片段的状态,这就是它的全部。

+0

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

我刚刚在我的项目中解决了这个问题。我拥有的是带有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(); 

这是否把戏对我来说。

您可以添加一个监听器,并覆盖您的片段对话的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

我试过@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. 内监听