作者:相见亦无语 | 来源:互联网 | 2023-10-11 14:22
众所周知,在Android3.0之后,google就加入了Fragment的概念,也就是俗称的碎片化,其目的是为了减少Activity的开销,也是为了适配安卓开发中不同屏幕尺寸的问
众所周知,在Android3.0之后,google就加入了Fragment的概念,也就是俗称的碎片化,其目的是为了减少Activity的开销,也是为了适配安卓开发中不同屏幕尺寸的问题。在注明的MVP开发模型当中,google官方建议将Fragment当成view层对待,可见Fragment在安卓开发中的分量是越来越重了。
今天要讲的主角就是DialogFragment,其实你也可以把它当成普通的Fragment处理,只是它是以弹框的形式出现的。如果你要做屏幕旋转适配的话,建议你将Dialog换成DialogFragment。因为DialogFragment会自动保存程序的运行状态,而且和Activity的生命周期息息相关。
需求
这次的需求就是要在DialogFragment中打开另外一个DialogFragment,但是不能显示成弹框重叠的效果。效果图如下:
第一个弹出框
点击Save按钮后显示进度弹框
划重点
1、重写onDismiss()方法
当窗口关闭(执行了dismiss或者点击了外部区域,或者按了返回键),此方法执行。但是不要调用父类的onDismiss方法,否则当前fragment就会被移除。我们想要的是fragment还在,只是关闭掉内部弹框,也是隐藏视图。
@Override
public void onDismiss(DialogInterface dialog) {
//丢弃super.onDismiss(dislog);
onSave();
}
2、点击save按钮时调用dialog.dismiss()方法,不要直接调用dismiss
getDialog().dismiss();
该方法最终还是会调用onDismiss()方法
3、关闭当前fragment
当任务异步任务执行完了以后,还要移除第一个DialogFragment。
@Override
public void showSuccess() {
//移除fragment
dismissAllowingStateLoss();
}
总结
DialogFragment可以简单的理解成Fragment+Dialog,onDismiss()方法是dialog关闭的回调,DialogFragment使用很简单,show()和dismiss()两个方法足以。