zoukankan      html  css  js  c++  java
  • ProgressDialog在setCancelable(false)时按返回键可dismiss

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

    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();
            }
        }
    }
  • 相关阅读:
    那些年,加班搞过的需求...
    在基于nuxt的移动端页面中引用mint UI的popup组件之父子组件传值
    nuxt下运行项目时内存溢出(out of memory)的一种情况
    转载的
    VUE旅程(2)
    用windbg+sos找出程序中谁占用内存过高,谁占用CPU过高(转载)
    分块算法总结(持续更新ing)
    【MATLAB建模学习实录【三】】插值与拟合、数据处理
    【MATLAB建模学习实录【二】】非线性规划函数模型板子
    【MATLAB建模学习实录【一】】MATLAB求解线性规划模板
  • 原文地址:https://www.cnblogs.com/johnlis/p/6373432.html
Copyright © 2011-2022 走看看