热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

AndroidDialogFragment嵌套DialogFragment显示问题

众所周知,在Android3.0之后,google就加入了Fragment的概念,也就是俗称的碎片化,其目的是为了减少Activity的开销,也是为了适配安卓开发中不同屏幕尺寸的问

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


推荐阅读
  • 本文介绍如何在 Android 中自定义加载对话框 CustomProgressDialog,包括自定义 View 类和 XML 布局文件的详细步骤。 ... [详细]
  • 本文将介绍如何在混合开发(Hybrid)应用中实现Native与HTML5的交互,包括基本概念、学习目标以及具体的实现步骤。 ... [详细]
  • 尽管在WPF中工作了一段时间,但在菜单控件的样式设置上遇到了一些基础问题,特别是关于如何正确配置前景色和背景色。 ... [详细]
  • 在Android中实现黑客帝国风格的数字雨效果
    本文将详细介绍如何在Android平台上利用自定义View实现类似《黑客帝国》中的数字雨效果。通过实例代码,我们将探讨如何设置文字颜色、大小,以及如何控制数字下落的速度和间隔。 ... [详细]
  • 本文详细介绍了如何在Spring框架中设置事件发布器、定义事件监听器及响应事件的具体步骤。通过实现ApplicationEventPublisherAware接口来创建事件发布器,利用ApplicationEvent类定义自定义事件,并通过ApplicationListener接口来处理这些事件。 ... [详细]
  • 使用TabActivity实现Android顶部选项卡功能
    本文介绍如何通过继承TabActivity来创建Android应用中的顶部选项卡。通过简单的步骤,您可以轻松地添加多个选项卡,并实现基本的界面切换功能。 ... [详细]
  • 本文探讨了如何使用Scrapy框架构建高效的数据采集系统,以及如何通过异步处理技术提升数据存储的效率。同时,文章还介绍了针对不同网站采用的不同采集策略。 ... [详细]
  • Gradle 是 Android Studio 中默认的构建工具,了解其基本配置对于开发效率的提升至关重要。本文将详细介绍如何在 Gradle 中定义和使用共享变量,以确保项目的一致性和可维护性。 ... [详细]
  • C/C++ 应用程序的安装与卸载解决方案
    本文介绍了如何使用Inno Setup来创建C/C++应用程序的安装程序,包括自动检测并安装所需的运行库,确保应用能够顺利安装和卸载。 ... [详细]
  • 本文详细介绍如何在SSM(Spring + Spring MVC + MyBatis)框架中实现分页功能。包括分页的基本概念、数据准备、前端分页栏的设计与实现、后端分页逻辑的编写以及最终的测试步骤。 ... [详细]
  • D17:C#设计模式之十六观察者模式(Observer Pattern)【行为型】
    一、引言今天是2017年11月份的最后一天,也就是2017年11月30日,利用今天再写一个模式,争取下个月(也就是12月份& ... [详细]
  • 网络流24题——试题库问题
    题目描述:假设一个试题库中有n道试题。每道试题都标明了所属类别。同一道题可能有多个类别属性。现要从题库中抽取m道题组成试卷。并要求试卷包含指定类型的试题。试设计一个满足要求的组卷算 ... [详细]
  • Android 中的布局方式之线性布局
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • web页面报表js下载,web报表软件 ... [详细]
author-avatar
相见亦无语
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有