仿APiDemo使用ProgressDialog 并解决调用dismiss方法后没有对话框不消失的问题

ProgressDialog在ApiDemo中:

在onCreateProgressDialog执行初始化创建

在OnPrepareProgressDialog执行后台操作

但是在实际过程中,可能会发现在handler中执行dialog.dismiss之后对话框没有消失,但是实际上子线程消息已经发送成功.

遇到这样的情况不妨试试下面的方法:

主要采用了定义2个Progressdialog分别指向开启进程框和关闭进程框,并且使用单例的方式提供进程框对象.

@Override
    protected Dialog onCreateDialog(int id) {
        switch (id) {
        case StaticUtils.PROGRESS_LOADING: {
            if (loadingDialog!=null) {
                return loadingDialog;
            }
            loadingDialog = new ProgressDialog(this);
            loadingDialog.setTitle("归属地服务");
            loadingDialog.setMessage("正在加载资源请稍后");
            loadingDialog.setIndeterminate(true);
            loadingDialog.setCancelable(true);
            return loadingDialog;
        }
        case StaticUtils.PROGRESS_CLEANING: {
            if (cleaningDialog!=null) {
                return cleaningDialog;
            }
            cleaningDialog = new ProgressDialog(this);
            cleaningDialog.setTitle("归属地服务");
            cleaningDialog.setMessage("正在关闭资源请稍后");
            cleaningDialog.setIndeterminate(true);
            cleaningDialog.setCancelable(true);
            return cleaningDialog;
        }
        }
        return null;
    }
    @Override
    @Deprecated
    protected void onPrepareDialog(int id, Dialog dialog) {
        super.onPrepareDialog(id, dialog);
        switch (id) {
        case StaticUtils.PROGRESS_LOADING:// 加载资源
            Logger.i(getPackageName(), "加载资源子线程开启");
            new Thread(new Runnable() {
                @Override
                public void run() {
                    prepareCallerlocDatabase();
                    // 将资源拷贝到
                    handler.sendEmptyMessage(StaticUtils.PROGRESS_LOADING_COMPLETE);
                }
            }).start();
            break;
        case StaticUtils.PROGRESS_CLEANING:// 删除资源
            new Thread(new Runnable() {
                @Override
                public void run() {
                    // 删除资源
                    FileUtils.deleteFile(getDatabasePath(
                            StaticUtils.ASSET_DB_ADDRESS).getPath());
                    Logger.i(getPackageName(), "删除资源完毕");
                                                                                                                                                                                                            
                    handler.sendEmptyMessage(StaticUtils.PROGRESS_CLEANING_COMPLETE);
                }
            }).start();
            break;
        default:
            break;
        }
    }

在hanlder中可以对其dismiss操作

this.handler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                switch (msg.what) {
                // 加载归属地数据库资源完毕
                case StaticUtils.PROGRESS_LOADING_COMPLETE:{
                    Logger.i(getPackageName(), "收到加载资源完毕消息");
                    loadingDialog.dismiss();   
                    break;
                }
                                                                                                                                                                                                    
                case StaticUtils.PROGRESS_CLEANING_COMPLETE:{
                    Logger.i(getPackageName(), "收到清除资源完毕消息");
                    cleaningDialog.dismiss();  
                    break;
                }
                default:
                    break;
                }
            }
        };



本文出自 “welcone!” 博客,谢绝转载!

你可能感兴趣的:(对话框,dismiss)