热门标签 | 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.


推荐阅读
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 本文介绍了django中视图函数的使用方法,包括如何接收Web请求并返回Web响应,以及如何处理GET请求和POST请求。同时还介绍了urls.py和views.py文件的配置方式。 ... [详细]
  • JavaWeb中读取文件资源的路径问题及解决方法
    在JavaWeb开发中,读取文件资源的路径是一个常见的问题。本文介绍了使用绝对路径和相对路径两种方法来解决这个问题,并给出了相应的代码示例。同时,还讨论了使用绝对路径的优缺点,以及如何正确使用相对路径来读取文件。通过本文的学习,读者可以掌握在JavaWeb中正确找到和读取文件资源的方法。 ... [详细]
  • Servlet多用户登录时HttpSession会话信息覆盖问题的解决方案
    本文讨论了在Servlet多用户登录时可能出现的HttpSession会话信息覆盖问题,并提供了解决方案。通过分析JSESSIONID的作用机制和编码方式,我们可以得出每个HttpSession对象都是通过客户端发送的唯一JSESSIONID来识别的,因此无需担心会话信息被覆盖的问题。需要注意的是,本文讨论的是多个客户端级别上的多用户登录,而非同一个浏览器级别上的多用户登录。 ... [详细]
  • 本文介绍了Java后台Jsonp处理方法及其应用场景。首先解释了Jsonp是一个非官方的协议,它允许在服务器端通过Script tags返回至客户端,并通过javascript callback的形式实现跨域访问。然后介绍了JSON系统开发方法,它是一种面向数据结构的分析和设计方法,以活动为中心,将一连串的活动顺序组合成一个完整的工作进程。接着给出了一个客户端示例代码,使用了jQuery的ajax方法请求一个Jsonp数据。 ... [详细]
  • 本文讨论了在shiro java配置中加入Shiro listener后启动失败的问题。作者引入了一系列jar包,并在web.xml中配置了相关内容,但启动后却无法正常运行。文章提供了具体引入的jar包和web.xml的配置内容,并指出可能的错误原因。该问题可能与jar包版本不兼容、web.xml配置错误等有关。 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • 延迟注入工具(python)的SQL脚本
    本文介绍了一个延迟注入工具(python)的SQL脚本,包括使用urllib2、time、socket、threading、requests等模块实现延迟注入的方法。该工具可以通过构造特定的URL来进行注入测试,并通过延迟时间来判断注入是否成功。 ... [详细]
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社区 版权所有