您的位置:首页 > 其它

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

2014-03-12 17:58 726 查看
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!” 博客,谢绝转载!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐