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

DialogFragment的基本使用

本文翻译自AndroidDeveloperBlog上面的一篇文章,原文地址:http:android-developers.blogspot.hk201205using-dialo

本文翻译自Android Developer Blog上面的一篇文章,原文地址:http://android-developers.blogspot.hk/2012/05/using-dialogfragments.html

Android 3.0 开始引入了Fragment来支持部分UI和逻辑在多个Activity中重用。与此同时,鉴于DialogFragment的优势,Activity中的showDialog/dismissDialog等方法被标记为过时(deprecated)。

在本篇中,我将给大家展示,如何在v4支持库(兼容3.0之前的版本)的支持下,来使用DialogFragment展示一个简单的编辑对话框(dialog)并通过回调的方式(interface)返回数据给调用它的Activity。关于Dialogs的设计规范,请参阅Android Design站点。

布局

下面是dialog的布局,命名为fragment_edit_name.xml

《DialogFragment的基本使用》 fragment_edit_name.xml

注意上面两个属性android:inputType=”text” 和 android:imeOptiOns=”actionDone”, 这两个属性会使得键盘“换行”键(Enter)显示为”完成”(Done)。

Dialog 代码

这个Dialog继承自DialogFragment, 并且我们想向后兼容,所以我们还引入了v4 support library。

《DialogFragment的基本使用》 EditNameDialog.java

这是个Fragment, 并且实现了onCreateView去加载实际使用的布局文件。

打开对话框(Dialog)

现在我们需要在我们的Activity里面添加一些代码,来打开对话框。这里有个简单的示例:快速打开EditNameDialog来输入用户名,输入完成时,弹出Toast来展示输入的内容。

《DialogFragment的基本使用》 FragmentDialogDemo.java

有几点需要注意:首先,因为我们在使用v4支持库,所以我们调用了getSupportFragmentManager()而不是getFragmentManager()。当我们加载了初始布局,通过调用EditNameDialog的show方法打开这个dialog, 这将保证Dialog的状态和Fragment的状态保持一致性。默认情况下,回退按键将销毁Dialog而不需要额外的代码。

使用Dialog

接下来让我们丰富一下EditNameDialog,让它返回结果给Activity。

《DialogFragment的基本使用》 EditNameDialog.java

为了方便,我们通过编程让mEditText获取焦点(mEditText.requestFocus())。另外,我们还可以通过在xml文件中设置 标签来实现。然而,很多情况下适合在代码中实现。举个例子,如果在xml中设置 标签, onCreateView()中的OnFocusChangeListener(如果有的话) 将不会被调用。

如果用户让mEditText获取焦点,软键盘将会自动弹出。我们通过代码让mEditText获取焦点,为了强制让软键盘弹出,我们调用了getDialog().getWindow().setSoftInputMode()方法。注意:在DialogFragment中,可以完成Dialog中的很多窗口操作,但是必须调用getDialog().getWindow()而不是getWindow()。

《DialogFragment的基本使用》 Dialog在手机和平板上的展示效果

当用户点击“完成”按键时,onEditorAction()方法负责回调。之所以被调用,因为我们给mEditText设置了OnEditorActionListener监听器。它将传递数据给Activity。为了传递数据,EditNameDialog声明了一个接口(EditNameDialogListener),由Activity去实现该接口,这使得Dialog可以被多个Activity重用。 要触发onFinishEditDialog()方法,Fragment通过调用getActivity()方法,并将他转换为接口类型。这是在MVC模型中,View和Controller通信的一个通用做法。

以上就是本篇要讲的。源码请见:Google Code.


推荐阅读
  • 学习目的:1.了解android线程的使用2.了解主线程与子线程区别3.解析异步处理机制主线程与子线程:所谓主线程,在Windows窗体应用程序中一般指UI线程,这个是程序启动的时 ... [详细]
  • 在创建新的Android项目时,您可能会遇到aapt错误,提示无法打开libstdc++.so.6共享对象文件。本文将探讨该问题的原因及解决方案。 ... [详细]
  • Python处理Word文档的高效技巧
    本文详细介绍了如何使用Python处理Word文档,涵盖从基础操作到高级功能的各种技巧。我们将探讨如何生成文档、定义样式、提取表格数据以及处理超链接和图片等内容。 ... [详细]
  • 历经三十年的开发,Mathematica 已成为技术计算领域的标杆,为全球的技术创新者、教育工作者、学生及其他用户提供了一个领先的计算平台。最新版本 Mathematica 12.3.1 增加了多项核心语言、数学计算、可视化和图形处理的新功能。 ... [详细]
  • 深入解析SpringMVC核心组件:DispatcherServlet的工作原理
    本文详细探讨了SpringMVC的核心组件——DispatcherServlet的运作机制,旨在帮助有一定Java和Spring基础的开发人员理解HTTP请求是如何被映射到Controller并执行的。文章将解答以下问题:1. HTTP请求如何映射到Controller;2. Controller是如何被执行的。 ... [详细]
  • 请看|差别_Android 6.0 运行时权限处理解析
    请看|差别_Android 6.0 运行时权限处理解析 ... [详细]
  • 本文介绍如何利用QFileSystemModel进行目录的浏览、创建及删除操作,并提供了一个简单的对话框界面实现。 ... [详细]
  • 利用HTML5 Canvas高效构建电信网络拓扑图
    电信网络拓扑图在实际应用中具有很高的实用价值。本文介绍了一个基于HTML5 Canvas的电信网络拓扑图项目,不仅实现了基本的图形展示功能,还加入了自动布局和属性栏功能,使项目更加完善。此Demo经过细微调整即可直接应用于实际项目中。 ... [详细]
  • 本文介绍了基于Java的汽车租赁系统开发,涵盖了从车辆采购预算到车辆维护的全过程管理。该系统利用现代互联网技术和数据库技术,实现了汽车租赁行业的全面信息化。 ... [详细]
  • 框图|中将_DA14531 学习笔记经验总结
    框图|中将_DA14531 学习笔记经验总结 ... [详细]
  • 本文介绍如何使用 Android 的 Canvas 和 View 组件创建一个简单的绘图板应用程序,支持触摸绘画和保存图片功能。 ... [详细]
  • 采用IKE方式建立IPsec安全隧道
    一、【组网和实验环境】按如上的接口ip先作配置,再作ipsec的相关配置,配置文本见文章最后本文实验采用的交换机是H3C模拟器,下载地址如 ... [详细]
  • 丽江客栈选择问题
    本文介绍了一道经典的算法题,题目涉及在丽江河边的n家特色客栈中选择住宿方案。两位游客希望住在色调相同的两家客栈,并在晚上选择一家最低消费不超过p元的咖啡店小聚。我们将详细探讨如何计算满足条件的住宿方案总数。 ... [详细]
  • Python 内存管理机制详解
    本文深入探讨了Python的内存管理机制,涵盖了垃圾回收、引用计数和内存池机制。通过具体示例和专业解释,帮助读者理解Python如何高效地管理和释放内存资源。 ... [详细]
  • 本文详细介绍了如何在MFC(Microsoft Foundation Classes)应用程序中使用树形控件(Tree Control)。通过创建基于对话框的应用程序,并逐步添加和配置树形控件,最终实现带有图标的树形结构。 ... [详细]
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社区 版权所有