Android DialogFragment关闭状态如何监听?

DialogFragment大家都不陌生,这也是官方推荐使用的弹框方式,关于这个类的使用也很多,今天就讲一下如何监听的它的关闭状态。在很多情况下,我们都要对用户的行为进行监听,比如在弹框消失的时候刷新页面,这是很常见的需求了,使用Dialog做的话,我们可以使用dialog.setOnDismissListener(DialogInterface.OnDismissListener listener);方式。但是DialogFragment并没有提供这样的方法,我们该怎么办呢?

Try1.自定义DialogFragment,添加关闭弹框的回调,如下:

public class TestDialogFragment extends DialogFragment {
  //做一些弹框的初始化,以及创建一个弹框
  public void setOnDismissListener (DialogInterface.OnDismissListener listener) {
    //设置关闭弹框的回调
  }
  
  @Override
  public void onStart(){
    super.onStart();
    getDialog().setOnDismissListener(new DialogInterface.OnDismissListener(){
      void onDismiss(DialogInterface dialog){
         if(listener != null) listener.onDismiss(dialog);
      }
    });
  }
}

经过测试发现,这种方式大部分情况下都有可以检测的准确,但是如果在点边缘关闭弹框时,监听中跳转到一个新的页面,会发现弹框并没有真的关闭。这个具体原因不详。

Try2.还是要自定义DialogFragment,添加关闭弹框的回调,如下:

public class UrgentNoticeDialog extends DialogFragment {
    private DialogInterface.OnDismissListener mOnClickListener;

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

    //做一些弹框的初始化,以及创建一个弹框

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

这种方式测试通过,完美解决问题。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文会不定期更新,推荐watch下项目。 如果喜欢请star,如果觉得有纰漏请提交issue,如果你有更好的点子可...
    天之界线2010阅读 13,568评论 10 123
  • 目录介绍 1.简单用法 2.AlertDialog源码分析2.1 AlertDialog.Builder的构造方法...
    杨充211阅读 1,149评论 1 1
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,510评论 0 17
  • title: Dialog官方文档总结date: 2016-03-14 21:38:14tags: Dialogc...
    Passon_Fang阅读 3,078评论 0 7
  • 余小芳 温州昊蕴文化发展有限公司 448期利他一组学员 472期谦虚一组志工 【2月22日打卡第153天】 【知~...
    pisces余阅读 257评论 0 0