ProgressDialog的setCancelable()相關,

最近發現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. }
3
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章