Pro Android学习笔记(九四):AsyncTask(3):ProgressDialog
来源:互联网 发布:隐式差分如何编程 编辑:程序博客网 时间:2024/05/21 07:49
文章转载只能用于非商业性质,且不能带有虚拟货币、积分、注册等附加条件。转载须注明出处: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学习笔记(九二):AsyncTask(1):AsyncTask类
- Pro Android学习笔记(九三):AsyncTask(2):小例子
- Pro Android学习笔记(九六):AsyncTask(5):横竖屏切换问题
- Pro Android学习笔记(七四):HTTP服务(8):使用后台线程AsyncTask
- Pro Android学习笔记(九五):AsyncTask(4):执行情况
- Pro Android学习笔记(四九):ActionBar(2):Action图标区
- Pro Android学习笔记(九九):BroadcastReceiver(3):长时间运行Receiver的问题
- Pro Android学习笔记(五九):Preferences(3):EditText和Ringtone Preference
- Pro Android学习笔记(六九):HTTP服务(3):HTTP POST MultiPart
- Pro Android学习笔记(八四):了解Package(3):包间数据共享
- Pro Android学习笔记(九):了解Content Provider(下下)
- Pro Android学习笔记(二九):用户界面和控制(17):include和merge
- Pro Android学习笔记(七九):服务(4):远程服务的实现
- Pro Android学习笔记(九一):了解Handler(5):组件生命
- Pro Android学习笔记(一一九):Telephony API(1):发送短信
- Pro Android学习笔记(一二九):Media Frameworks(4):JetPlayer、AsyncPlayer和AudioTrack
- Pro Android学习笔记(四四):Dialog(1):触发Dialog
- Android ---切西瓜
- ce
- jQuery动态加载JS以减少服务器压力
- ><
- Objective-C 协议(protocol)
- Pro Android学习笔记(九四):AsyncTask(3):ProgressDialog
- linux应用编程之I/O编程
- map和set 题目IP & QQ
- 浅谈struts的数据验证机制
- Java Socket超时浅析
- ASP.NET初了解(二)-- 页面构成介绍
- C#如何连接Oracle数据库,如何把数据绑定到dataGridView,如何把dataGridView数据导出到EXCEL
- 块级元素和内联元素
- Selenium RC的组成: