Android DialogFragment嵌套DialogFragment显示问题

众所周知,在Android3.0之后,google就加入了Fragment的概念,也就是俗称的碎片化,其目的是为了减少Activity的开销,也是为了适配安卓开发中不同屏幕尺寸的问题。在注明的MVP开发模型当中,google官方建议将Fragment当成view层对待,可见Fragment在安卓开发中的分量是越来越重了。
今天要讲的主角就是DialogFragment,其实你也可以把它当成普通的Fragment处理,只是它是以弹框的形式出现的。如果你要做屏幕旋转适配的话,建议你将Dialog换成DialogFragment。因为DialogFragment会自动保存程序的运行状态,而且和Activity的生命周期息息相关。

需求

这次的需求就是要在DialogFragment中打开另外一个DialogFragment,但是不能显示成弹框重叠的效果。效果图如下:

《Android DialogFragment嵌套DialogFragment显示问题》 第一个弹出框

《Android 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()两个方法足以。

    原文作者:aitality
    原文地址: https://www.jianshu.com/p/4c7094b985de
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞