【转】 Pro Android学习笔记(九四):AsyncTask(3):ProgressDialog
文章转载只能用于非商业性质,且不能带有虚拟货币、积分、注册等附加条件。转载须注明出处:http://blog.csdn.net/flowingflying/
Progress Dialog小例子
我们通过IReportBack接口隐藏了Activity,但是有时我们需要弹框等操作,就需要Context。下面的例子是在执行的过程中弹出Progress Dialog来提示正在处理中。

和MyLongTaskTwo相同的处理的代码将不列出。
public class MyLongTaskTwo extends AsyncTask<String,Integer,Integer>{
private IReportBack report = null;
private Context context = null;
private String tag = null;
private ProgressDialog pd = null;
//在AsyncTask中进行弹框处理,需要在构造函数中传递Context。
public MyLongTaskTwo(IReportBack inr, Context inCont, String inTag){
report = inr;
context = inCont;
tag = inTag;
}
@Override
protected void onPreExecute() {
pd = ProgressDialog.show(context, tag, "In progress.... "); //显示进度框,这里需要context
}
@Override
protected void onProgressUpdate(Integer... values) {
…..
}
@Override
protected void onPostExecute(Integer result) {
……
pd.cancel(); //取消进度框的显示
}
@Override
protected Integer doInBackground(String... params) {
… …
}
}
在主线程中AsyncTask的代码:
private void testProgressDialog(){
MyLongTaskTwo task = new MyLongTaskTwo(this, this, "TaskTwo");//传递context
task.execute("TaskTwo","File","Edit","Refactor","Source","Navigate", Help");
}
上面的进度框不能精确显示进展情况,称为indeterministic进度框。更多的时候我们希望能显示进展程度,这就是deterministic进度框,如图所示:

相关代码如下:
public class MyLongTaskThree extends AsyncTask<String,Integer,Integer>
implements DialogInterface.OnCancelListener{
@Override //ProgressDialog被cancel时触发的回调函数,处理pd.cancel()会触发外,如果我们按了返回键,也会触发onCancel,我们可以在此进行关闭async任务的处理,否则任务的worker线程将继续执行。
public void onCancel(DialogInterface dialog) {
report.reportBack(tag,"Cancel Called");
}
... ...
private ProgressDialog pd = null;
public MyLongTaskThree(IReportBack inr, Context inCont, String inTag,int inLen){
... ...
}
@Override
protected void onPreExecute() {
pd = new ProgressDialog(context);
pd.setTitle(tag);
pd.setMessage("In progressing");
pd.setCancelable(true);
pd.setOnCancelListener(this); //设置cancel的回调函数
pd.setIndeterminate(false); //表明是个detemininate精确显示的进度框
pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
pd.setMax(length);
pd.show();
}
@Override
protected void onProgressUpdate(Integer... values) {
... ...
pd.setProgress(i+1);
}
@Override
protected void onPostExecute(Integer result) {
... ...
pd.cancel();
}
@Override
protected Integer doInBackground(String... params) {
int num = params.length;
for(int i = 0; i < num;i ++){
Utils.sleepForSecs(2);
publishProgress(i);
}
return num;
}
}
相关小例子源代码可在Pro Android学习:AsyncTask小例子中下载。
相关链接: 我的Android开发相关文章
【转】 Pro Android学习笔记(九四):AsyncTask(3):ProgressDialog的更多相关文章
- 【转】 Pro Android学习笔记(四十):Fragment(5):适应不同屏幕或排版
目录(?)[-] 设置横排和竖排的不同排版风格 改写代码 对于fragment,经常涉及不同屏幕尺寸和不同的排版风格.我们在基础小例子上做一下改动,在横排的时候,仍是现实左右两个fragment,在竖 ...
- 【转】 Pro Android学习笔记(四二):Fragment(7):切换效果
目录(?)[-] 利用setTransition 利用setCustomAnimations 通过ObjectAnimator自定义动态效果 程序代码的编写 利用fragment transactio ...
- 【转】 Pro Android学习笔记(四八):ActionBar(1):Home图标区
目录(?)[-] Home Icon 源代码 TextView的滚动 返回主activity或指定activity ActionBar在Android 3.0 SDK中为平板引入,在4.0中也 ...
- 【转】 Pro Android学习笔记(四七):Dialog(4):一些补充和思考
目录(?)[-] 编程思想封装接口 fragment和activity以其他fragment之间的通信 编程思想:封装接口 在小例子中,fragment会调用activity的onDialogDone ...
- 【转】 Pro Android学习笔记(四三):Fragment(8):再谈Transaction和管理器
目录(?)[-] Transaction的一些操作 再谈FragmentManager 调用其他fragment的方法 唤起activity 唤起fragment和相互通信 一些其它 Transact ...
- 【转】Pro Android学习笔记(四):了解Android资源(下)
处理任意的XML文件 自定义的xml文件放置在res/xml/下,可以通过R.xml.file_name来获取一个XMLResourceParser对象.下面是xml文件的例子: <rootna ...
- 【转】 Pro Android学习笔记(二九):用户界面和控制(17):include和merge
目录(?)[-] xml控件代码重用include xml控件代码重用merge 横屏和竖屏landsacpe portrait xml控件代码重用:include 如果我们定义一个控件,需要在不同的 ...
- Pro Android学习笔记 ActionBar(1):Home图标区
Pro Android学习笔记(四八):ActionBar(1):Home图标区 2013年03月10日 ⁄ 综合 ⁄ 共 3256字 ⁄ 字号 小 中 大 ⁄ 评论关闭 ActionBar在A ...
- 【转】 Pro Android学习笔记(五六):配置变化
目录(?)[-] Activity的destorycreate过程 Fragment的destorycreate过程 onSaveInstanceState saveFragmentInstanceS ...
- 【转】 Pro Android学习笔记(十九):用户界面和控制(7):ListView
目录(?)[-] 点击List的item触发 添加其他控件以及获取item数据 ListView控件以垂直布局方式显示子view.系统的android.app.ListActivity已经实现了一个只 ...
随机推荐
- JSP报错01
ZC: 创建一个JSP之后,就报如下错误. 1.错误: 1.1. 2.处理: Exlipse for JEE --> Project Explorer 中选择项目 --> 右击项目名 -- ...
- ElasticSearch数据副本模型
介绍 ES里面的每一个索引(Index)由多个shard组成,每一个shard有多个副本.这些副本被称为同步组.当增加或者删除文档时,这些副本之间必须保持同步,以便让所有副本都能包含相同的文档.如果同 ...
- linux上安装mysql以后root不能登录的解决办法
今天心血来潮在linux上装了mysql,装完以后用命令mysql -uroot -p登录时提示 解决办法: 使用ps aux|grep mysql 查出pid 使用kill pid结束mysql进程 ...
- HTML 中 id与name 区别
一个name可以同时对应多个控件,比如checkbox和radio而id必须是全文档中唯一的 id的用途1) id是HTML元素的Identity,主要是在客户端脚本里用.2) label与form控 ...
- shell编程学习1
1.shell是操作系统的终端命令行 (1)shell可以理解为软件系统提供给用户操作的命令行界面,可以说它是人机交互的一种方式. (2)我们可以使用shell和操作系统.uboot等软件系统进 ...
- hibernate12--注解
在之前的基础上删除hbm.xml映射文件 之后修改实体类内容 /** * 部门的实体类 * strategy对应的就是主键生成策略 * GenerationType: * 01.auto:自动选择合适 ...
- Python基础学习(第5天)
第3课 模块 1.模块(module) Python中一个.py文件就是一个模块,可以调用其它文件中的程序. 例:first.py def laugh(): print '哈哈哈哈哈' second ...
- 读书笔记-Ribbon源码分析
@LoadBalanced注解用来给RestTemplate做标记,以使用负载均衡的客户端来配置. 通过搜索LoadBalancerClient可以发现,LoadBalancerClient是Spri ...
- 使用redis计数来控制单位时间内对某接口的访问量,防止刷验证码接口之类的
使用自定义注解的方式,在需要被限制访问频率的方法上加注解即可控制. 看实现方式,基于springboot,aop,redis. 新建Springboot工程,引入redis,aop. 创建注解 pac ...
- NLTK下载语言素材中碰到的certificate verify failed (_ssl.c:749)
NLTK是什么? NLTK是一个开源的项目,包含:Python模块,数据集和教程,用于NLP的研究和开发. NLTK由Steven Bird和Edward Loper在宾夕法尼亚大学计算机和信息科学系 ...