仿APiDemo使用ProgressDialog 并解决调用dismiss方法后没有对话框不消失的问题
2014-03-12 17:58
726 查看
ProgressDialog在ApiDemo中:
在onCreateProgressDialog执行初始化创建
在OnPrepareProgressDialog执行后台操作
但是在实际过程中,可能会发现在handler中执行dialog.dismiss之后对话框没有消失,但是实际上子线程消息已经发送成功.
遇到这样的情况不妨试试下面的方法:
主要采用了定义2个Progressdialog分别指向开启进程框和关闭进程框,并且使用单例的方式提供进程框对象.
本文出自 “welcone!” 博客,谢绝转载!
在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!” 博客,谢绝转载!
相关文章推荐
- Win32 api使用中调用GetOpenFileName打开文件对话框无响应的解决方法
- linux Eclipse上c++调用使用了tensorflow库的python程序遇到的问题及解决方法
- 使用API调用Winodws各种通用对话框(Common Diaglog)的方法
- Myeclipse中文件已经上传到server文件夹下,文件也没有被占用,可是页面中无法读取和使用问题的解决方法
- Android Studio-—使用OpenCV的配置方法和demo以及开发过程中遇到的问题解决
- 没有权限使用网络资源问题的解决方法
- VC6.0编译DLL,使用VS2010调用问题及解决方法
- 代理 -> 在viewController,没有初始化时,有调用代理方法,解决崩溃问题
- VC6.0编译DLL,使用VS2010调用问题及解决方法
- struts2.5 使用感叹号和通配符实现动态方法调用无效的问题及解决!
- linux 使用crontab添加定时任务,日志显示已经执行但是任务没有成功调用解决方法
- ProgressDialog调用dismiss()不消失、null是什么(dead code问题)
- 使用 Hibernate 在 JPA 中 调用 generateSchema 会出现执行两次 SQL 语句问题的解决方法
- 树莓派3中没有/dev/video0的解决方法(使用OpenCV编程调用树莓派摄像头的方法)
- [iOS] performSelector:withObject:afterDelay:调用没有作用的问题及解决方法
- TabActivity下在AsyncTask中使用ProgressDialog存在问题的解决方法
- VS2005调用MS Speech API 5.1 sphelper.h出现的问题及解决方法
- WindowsMobile(Winform)开发中的数据存储(解决在不同的Form中要调用对方的方法或者使用对方的数据问题)
- 百度 地图 slidingmenu 黑边 使用截图的方式解决黑边问题,步骤: 1.slidingMenu打开的时候调用BaiduMap的snapshot方法截图获取Bitmap对象; 2.使用
- 使用dismissModalViewControllerAnimated 不调用dealloc 内存不释放解决方法