1. 概述
最近项目中用到了 DialogFragment,在使用 DialogFragment 的时候,遇到了很多问题,比如如何在显示的时候保证状态栏的颜色也不发生变化,如何设置自己的背景,不用系统背景等等。
那么 DialogFragment 是什么样的呢?DialogFragment 在 android 3.0 时被引入,是一种特殊的 Fragment,用于在 Activity 的内容之上展示一个模态的对话框。典型的用于:展示警告框,输入框,确认框等等。
在 DialogFragment 产生之前,我们创建对话框:一般采用 AlertDialog 和 Dialog。注:官方不推荐直接使用Dialog创建对话框。使用 DialogFragment 来管理对话框,当旋转屏幕和按下后退键时可以更好的管理其声明周期,它和 Fragment 有着基本一致的声明周期。且 DialogFragment 也允许开发者把 Dialog 作为内嵌的组件进行重用,类似 Fragment(可以在大屏幕和小屏幕显示出不同的效果)
使用 DialogFragment 至少需要实现 onCreateView
或者 onCreateDIalog
方法。onCreateView
即使用定义的 xml 布局文件展示 Dialog。onCreateDialog
即利用 AlertDialog 或者 Dialog 创建出Dialog。
2. 应用
2.1 采用静态方法来构造 DialogFragment
下面我们开始自己写一个 DialogFragment,但是,当我按照习惯惯性写下如下代码的时候,给了我一个刺眼的红色提示:
错误提示: Avoid non-default constructors in fragments: use a default constructor plus Fragment#setArguments(Bundle) instead
其原因是你重载了fragment的构造方法,但是在一些情况下,如屏幕翻转时,fragment被重新创建,就可能会造成数据丢失。
解决方案一(不推荐):
@SuppressLint({"NewApi", "ValidFragment"}) 在构造方法上加上这个注解,就可以不检察,但是这是google不推荐的做法
解决方案二(也不推荐):
禁止报错
lintOptions { abortOnError false }