最近发现Android4.0系统中ProgressDialog设置为setCancelable(true)时,点击ProgressDialog以外的区域也可以让ProgressDialog dismiss掉。但有时我们不希望是这样的效果,于是将ProgressDialog设置setCancelable(false),再点击ProgressDialog以外的区域就不会出现前面所说的情况了,然而这样以来再按返回键时就不起作用了,只能等待程序执行到dissmiss处为止。其实,只要为ProgressDialog添加KeyListener来对返回键予以处理就可以解决这个问题了。

  1. package cn.winfirm.examples.base;
  2. import android.app.Activity;
  3. import android.app.ProgressDialog;
  4. import android.content.DialogInterface;
  5. import android.content.DialogInterface.OnKeyListener;
  6. import android.os.Bundle;
  7. import android.view.KeyEvent;
  8. import android.view.Window;
  9. /**
  10. * Activity的基类,带一个ProgressDialog,可双击取消其显示
  11. *
  12. * @author savant
  13. *
  14. */
  15. public class BaseActivity extends Activity {
  16. private ProgressDialog progressDialog = null;
  17. @Override
  18. protected void onCreate(Bundle savedInstanceState) {
  19. super.onCreate(savedInstanceState);
  20. requestWindowFeature(Window.FEATURE_NO_TITLE);
  21. }
  22. /**
  23. * show loading progress dialog
  24. */
  25. public void showDialog() {
  26. if (null == progressDialog) {
  27. progressDialog = ProgressDialog.show(BaseActivity.this, "", "正在加载,请稍候...");
  28. progressDialog.setCancelable(false);
  29. } else {
  30. progressDialog.show();
  31. }
  32. progressDialog.setOnKeyListener(onKeyListener);
  33. }
  34. /**
  35. * add a keylistener for progress dialog
  36. */
  37. private OnKeyListener onKeyListener = new OnKeyListener() {
  38. @Override
  39. public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
  40. if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {
  41. dismissDialog();
  42. }
  43. return false;
  44. }
  45. };
  46. /**
  47. * dismiss dialog
  48. */
  49. public void dismissDialog() {
  50. if (isFinishing()) {
  51. return;
  52. }
  53. if (null != progressDialog && progressDialog.isShowing()) {
  54. progressDialog.dismiss();
  55. }
  56. }
  57. /**
  58. * cancel progress dialog if nesseary
  59. */
  60. @Override
  61. public void onBackPressed() {
  62. if (progressDialog != null && progressDialog.isShowing()) {
  63. dismissDialog();
  64. } else {
  65. super.onBackPressed();
  66. }
  67. }
  68. }

让ProgressDialog在setCancelable(false)时按返回键可dismiss的更多相关文章

  1. 解决Hbuilder打包的apk文件按手机返回键直接退出软件

    问题描述:Hbuilder打包的app如果点击手机返回键,app会直接退出,返回不了上一页. 写在公共js文件中,每个页面均引入该js,代码如下: document.addEventListener( ...

  2. 简写代码:当变量为false时['',false,null,undefined,0,NaN]时,返回默认值

    当变量为'',false,null,undefined,0,NaN时,返回默认值 var a='' a || 'hello world'   "hello world" var a ...

  3. easyui-combobox的option选项为true与false时的问题

    如题,我们使用easyui-combobox,当我们的选择项为true与false时,即选择是否,后台返回一个boolean类型的变量,那么这时候,通过form表单进行反显会出现这样的问题:表单里ea ...

  4. 在一个由 'L' , 'R' 和 'X' 三个字符组成的字符串(例如"RXXLRXRXL")中进行移动操作。一次移动操作指用一个"LX"替换一个"XL",或者用一个"XR"替换一个"RX"。现给定起始字符串start和结束字符串end,请编写代码,当且仅当存在一系列移动操作使得start可以转换成end时, 返回True。

    在一个由 'L' , 'R' 和 'X' 三个字符组成的字符串(例如"RXXLRXRXL")中进行移动操作.一次移动操作指用一个"LX"替换一个"XL ...

  5. 在idea中相同的字符串使用equals()进行比较时,返回值是flase问题

    最近在idea中遇到了一个编码的问题,我的程序是从前台传过来一个字符串,判断用户的角色(学生,教师,管理员), 在进行equals()判断时,返回的确是false,然后就在网上查了查,发现是编码的问题 ...

  6. 请求facebook授权时,返回错误

    在请求facebook授权时,返回如下错误:所提供的网址不被应用程序配置所接纳.:应用程序的设置不允许一个或多个所提供的链接.它必须与网站的URL或Canvas的URL相符,或该域必须是应用程序的一个 ...

  7. 当SD卡拔出时,返回首页,栈中的activity都要清除,只留下首页的activity

    目标:当SD卡拔出时,返回首页,栈中的activity都要清楚,只留下首页的activity 我在清单中注册了一个静态广播: <receiver android:name="com.p ...

  8. 关于C#读取MySql数据时,返回DataTable中某字段数据是System.Array[]形式

    我在使用C#(VS2008)读取MySql数据库(5.1版本)时,返回的DataTable数据中arrivalDate字段数据显示为System.Array[]形式(程序中没有对返回的数据进行任何加工 ...

  9. layui table分页 page为false时,limit问题

    问题描述:table数据表格page设为false时,limit为默认设置10 解决办法:limit设为 Number.MAX_VALUE 加载全部数据 实例: var table = layui.t ...

随机推荐

  1. Windows下合并tar分卷

    如有例如以下几个tar分卷:logs.tar.gza1.logs.tar.gza2.logs.tar.gza3.在Windows下怎样进行合并呢? 按"win+r"键在弹出的输入框 ...

  2. Altium Designer的pcb上添加文字说明

  3. linux下U盘状态检测

    Linux的文件系统是异步的,也就是说写一个文件不是立刻保存到介质(硬盘,U盘等)中,而是存到缓冲区内,等积累到一定程度再一起保存到介质中.如果没有umount就非法拔出U盘,程序是不知道的,fope ...

  4. 关于DMA

    用串口在dma中发东西的时候,,, 要判断DMA里是不是由东西,是不是在占用 当多个外设再用DMA的时候,,,要查看DMA有没有占用 一包数没发完,不要再传另一包

  5. [Redis专辑][1]ubuntu12.04下安装php-redis的方法和步骤

    首次公布路径:phpredis的安装 非常久非常久没有写博文了,好多博文都没有整理完成,今天才抽时间整理完这一篇博文,希望能对大家有一定的帮助 首先对redis做个简单的介绍: Redis 是全然开源 ...

  6. android 应用内部获取本应用或者相应包名的应用的SHA1签名的办法

    我这个人比較懒.每次做的都是心血来潮,所以打算改掉这个坏毛病.昨晚非常晚才睡,躺在床上一直在回忆.这两年来,我以前的目标是什么,我放弃了什么,我完毕了什么. 结果目标非常多,也放弃了一些. 完毕的差点 ...

  7. 手把手生成决策树(dicision tree)

    手把手生成决策树(dicision tree) 标签: Python 机器学习 主要參考资料: Peter HARRINGTON.机器学习实战[M].李锐,李鹏,曲亚东,王斌译.北京:人民邮电出版社, ...

  8. 数学分析告诉偶们什么(vamei)

    1]人生的痛苦在于追求错误的东西.所谓追求错误的东西,就是你在无限趋近于它的时候,才猛然发现,你和它是不连续的. 2]人和人就像数轴上的有理数点,彼此能够靠得非常近非常近,但你们之间始终存在隔阂. 3 ...

  9. GCD网络多线程---同步运行,异步运行,串行队列,并行队列

    总结:同步(无论是串行还是并行)----不又一次开辟子线程 异步(无论是串行还是并行)----开辟子线程 GCD: dispatch queue 主线程的main queue 并行队列 global ...

  10. MySQL建立双向主备复制server配置方法

    1.环境描写叙述 serverA(主) 192.85.1.175 serverB(从) 192.85.1.176 Mysql版本号:5.1.61 系统版本号:System OS:ubuntu 10.1 ...