• 让ProgressDialog在setCancelable(false)时按返回键可dismiss


    最近发现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. }
  • 相关阅读:
    转载:山寨币凶猛
    Windows8.1 关机异常的解决
    Windows8、Windows8.1使用便签工具
    下载Sourceforge等国内无法下载站点文件的另一种方法
    专著出版成本计算
    PL2303 Windows8.1驱动
    转载:寒门再难出贵子
    华为荣耀品牌独立,子品牌战略能否实现新突破
    路由大战前夜,盘点智能路由的前世今生
    2020年实用工具推荐
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6469703.html
Copyright © 2020-2023  润新知