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,但是,当我按照习惯惯性写下如下代码的时候,给了我一个刺眼的红色提示:

Android View 的绘制流程之 Measure 过程详解 (一)-LMLPHP

错误提示: Avoid non-default constructors in fragments: use a default constructor plus Fragment#setArguments(Bundle) instead

其原因是你重载了fragment的构造方法,但是在一些情况下,如屏幕翻转时,fragment被重新创建,就可能会造成数据丢失。

解决方案一(不推荐):

@SuppressLint({"NewApi", "ValidFragment"})  在构造方法上加上这个注解,就可以不检察,但是这是google不推荐的做法

解决方案二(也不推荐):

禁止报错

lintOptions {
    abortOnError false
}
09-20 04:32