Android DialogFragment嵌套DialogFragment显示问题

众所周知,在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()两个方法足以。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,310评论 25 708
  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 12,949评论 2 59
  • 愛情銀行 事件:昨天晚上程界发微信给我说今天早上来周至学习,因为己经十一点多了我就没有告诉家长,早上家长起来叫我签...
    李侠君阅读 99评论 0 0
  • 很多朋友说看完《我不是药神》感动的流泪,而我却是被触动。“珍惜生命,保持健康”是看完影片后最想说的一句话,活着才有...
    高圆圆_999阅读 1,152评论 0 1
  • 这篇关于最优化的文章是最近学习的一个总结,放在简书上,方便以后查阅,如果帮助了其他读者,也算一件好事。 一、前言 ...
    就是杨宗阅读 3,505评论 0 3