仿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;
                }
            }
        };



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章