让ProgressDialog在setCancelable(false)时按返回键可dismiss
2015-07-25 10:44
369 查看
package cn.winfirm.examples.base; import android.app.Activity; import android.app.ProgressDialog; import android.content.DialogInterface; import android.content.DialogInterface.OnKeyListener; import android.os.Bundle; import android.view.KeyEvent; import android.view.Window; /** * Activity的基类,带一个ProgressDialog,可双击取消其显示 * * @author savant * */ public class BaseActivity extends Activity { private ProgressDialog progressDialog = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); } /** * show loading progress dialog */ public void showDialog() { if (null == progressDialog) { progressDialog = ProgressDialog.show(BaseActivity.this, "", "正在加载,请稍候..."); progressDialog.setCancelable(false); } else { progressDialog.show(); } progressDialog.setOnKeyListener(onKeyListener); } /** * add a keylistener for progress dialog */ private OnKeyListener onKeyListener = new OnKeyListener() { @Override public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) { dismissDialog(); } return false; } }; /** * dismiss dialog */ public void dismissDialog() { if (isFinishing()) { return; } if (null != progressDialog && progressDialog.isShowing()) { progressDialog.dismiss(); } } /** * cancel progress dialog if nesseary */ @Override public void onBackPressed() { if (progressDialog != null && progressDialog.isShowing()) { dismissDialog(); } else { super.onBackPressed(); } } }
最近发现Android4.0系统中ProgressDialog设置为setCancelable(true)时,点击ProgressDialog以外的区域也可以让ProgressDialog dismiss掉。但有时我们不希望是这样的效果,于是将ProgressDialog设置setCancelable(false),再点击ProgressDialog以外的区域就不会出现前面所说的情况了,然而这样以来再按返回键时就不起作用了,只能等待程序执行到dissmiss处为止。其实,只要为ProgressDialog添加KeyListener来对返回键予以处理就可以解决这个问题了。
相关文章推荐
- POJ-3273 Monthly Expense
- 由前序(后序)中序构造二叉树
- 介紹好用工具:RichCopy (檔案複製與備份的絕佳工具)
- ISA2006如何用SQL来记录日志?
- 17. JavaScript Math(算数)对象
- Android WebView 开发详解(一)
- [Leetcode 151, Medium] Reverse Words in a String
- opencv+pcl配置
- 10570 - Meeting with Al (贪心)
- 列出文件夹下所有文件夹的树形结构--Dos命令 tree的使用
- JavaScript权威指南_139_第15章_脚本化文档_15.9-HTML表单-选取表单和表单元素
- Freemarker详细解释
- Unity 5 全局光照GI与新的烘焙系统初探
- 中国定制版Windows 10应用商店系统界面曝光
- HDU 1729
- HDU 1729
- iOS Autorelease Runloop
- Exchange的缓存模式有什么用?
- JNI笔记1
- 前端常用插件使用文档 以及demo