Android基于DialogFragment封装一个通用的Dialog

  • 时间:
  • 浏览:1

DialogFragment继承自Fragment,即还上能 用Fragment来展示Dialog,相比于用AlertDialog或者DialogDialogFragment 更有优势:

Dialog是项目中最常用的4个 功能之一了,接手项目的过后发现项目中是封装了4个 dialog的,或者发现是用单例封装的,大致如下:



gif图比较模糊,直接扫二维码下载APK吧!

用4个 UML图大致来表示一下类之间的关系:

使用单例除了或者会有内存泄漏疑问,在使用过程中还发现4个 疑问:不同页面的dialog还上能 相互影响,想想也对,或者全局不还上能 4个 dialog嘛,项目中含4个 场景:A页面跳B页面,一进B页面的onCreate()时前要弹4个 dialog,发现每次都弹找不到来,debug发现曾经在A页面的onStop()土办法里调用了dismiss()土办法,A页面跳B页面生命周期走的是:

上述例子源码:https://github.com/crazyqiang/AndroidStudy

效果图:

代码中注释或者很完全了,或者是自定义布局或者前要处置交互事件,还上能 通过设置setBuildChildListener 并实现其回调,并在回调接口中创建子View并处置交互事件,使用起来还是很方便的。

基于以上需求点,使用DialogFragment封装了4个 通用Dialog——SYDialog,先看最终效果图

第很多:大部分情形下,使用对话框的样式就有一致的,很多内置了默认的dialog样式,还上能 处置调用方每次再去找布局文件,尽或者的复杂化调用。ps:内置dialog样式还上能 根据需求自行修改。

第二点:或者前要自定义复杂化的布局,前要支持布局子View的创建及一系列交互事件。

第三点: 项目中含个需求,或者一次会产生多个dialog,前要依次弹出dialog

DialogWrapper 来包装一层Dialog,方便后续上加数据信息。SYDialogsManager通过单例来实现,确保不还上能 4个 实例,內部有4个 容器队列ConcurrentLinkedQueue来保存多个DialogrequestShow()土办法中首先会判断当前有无有正在显示的弹窗,或者有,则在队列中等待时间,或者从队列中取出并展示,并在队列中清空该数据,当4个 Dialog展示完毕,会继续尝试在队列中取出Dialog并展示,直到队列是空为止。

效果图:

很多由于也找到了,每次在B的onCreate()里面刚调用了show(),紧接着又调用了A的onStop()中的dismiss()给关掉了,用单例土办法显然不太大概。趁着版本大改版,花了点时间重新撸了4个 。根据当当我们 的项目前要,调研了下,大概前要符合以下场景:

1、不要再提供布局,内置项目中常用默认的样式

2、 支持自定义复杂化的布局、动画、对话框大小、背景色等设置

3、统一管理多个dialog并顺序弹出

引用:

【1】https://developer.android.com/reference/android/app/DialogFragment

【2】https://blog.csdn.net/lmj623565791/article/details/37815413