文章转载只能用于非商业性质,且不能带有虚拟货币、积分、注册等附加条件。转载须注明出处: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的更多相关文章

  1. 【转】 Pro Android学习笔记(四十):Fragment(5):适应不同屏幕或排版

    目录(?)[-] 设置横排和竖排的不同排版风格 改写代码 对于fragment,经常涉及不同屏幕尺寸和不同的排版风格.我们在基础小例子上做一下改动,在横排的时候,仍是现实左右两个fragment,在竖 ...

  2. 【转】 Pro Android学习笔记(四二):Fragment(7):切换效果

    目录(?)[-] 利用setTransition 利用setCustomAnimations 通过ObjectAnimator自定义动态效果 程序代码的编写 利用fragment transactio ...

  3. 【转】 Pro Android学习笔记(四八):ActionBar(1):Home图标区

    目录(?)[-] Home Icon 源代码 TextView的滚动 返回主activity或指定activity     ActionBar在Android 3.0 SDK中为平板引入,在4.0中也 ...

  4. 【转】 Pro Android学习笔记(四七):Dialog(4):一些补充和思考

    目录(?)[-] 编程思想封装接口 fragment和activity以其他fragment之间的通信 编程思想:封装接口 在小例子中,fragment会调用activity的onDialogDone ...

  5. 【转】 Pro Android学习笔记(四三):Fragment(8):再谈Transaction和管理器

    目录(?)[-] Transaction的一些操作 再谈FragmentManager 调用其他fragment的方法 唤起activity 唤起fragment和相互通信 一些其它 Transact ...

  6. 【转】Pro Android学习笔记(四):了解Android资源(下)

    处理任意的XML文件 自定义的xml文件放置在res/xml/下,可以通过R.xml.file_name来获取一个XMLResourceParser对象.下面是xml文件的例子: <rootna ...

  7. 【转】 Pro Android学习笔记(二九):用户界面和控制(17):include和merge

    目录(?)[-] xml控件代码重用include xml控件代码重用merge 横屏和竖屏landsacpe portrait xml控件代码重用:include 如果我们定义一个控件,需要在不同的 ...

  8. Pro Android学习笔记 ActionBar(1):Home图标区

     Pro Android学习笔记(四八):ActionBar(1):Home图标区 2013年03月10日 ⁄ 综合 ⁄ 共 3256字 ⁄ 字号 小 中 大 ⁄ 评论关闭 ActionBar在A ...

  9. 【转】 Pro Android学习笔记(五六):配置变化

    目录(?)[-] Activity的destorycreate过程 Fragment的destorycreate过程 onSaveInstanceState saveFragmentInstanceS ...

  10. 【转】 Pro Android学习笔记(十九):用户界面和控制(7):ListView

    目录(?)[-] 点击List的item触发 添加其他控件以及获取item数据 ListView控件以垂直布局方式显示子view.系统的android.app.ListActivity已经实现了一个只 ...

随机推荐

  1. Android -- UI布局管理,相对布局,线性布局,表格布局,绝对布局,帧布局

    1. 相对布局 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmln ...

  2. JQuery -- Validate, Jquery 表单校验

    1. Jquery 表单验证需要插件 jQuery validation 1.7  ---验证插件需要:jQuery 1.3.2 或 1.4.2版本 http://jquery.bassistance ...

  3. 关于log4j.properties例子:DailyRollingFileAppender

    package com.v512.log4j; import org.apache.log4j.Logger; public class HelloLog4J { // 构造记录器,形参是记录器所在的 ...

  4. scala学习手记26 - 重用函数值

    函数值对消除代码重复有很大的帮助.但是像函数值这样直接将一个函数作为另一个函数的参数却不太利于函数值本身的重用. 来看一个例子: class Equipment(val routine: Int =& ...

  5. 更新CentOS 6.7源为阿里源

    1.备份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 2.下载新的CentOS-Base ...

  6. 使用SpringMVC时报错HTTP Status 405 - Request method 'GET' not supported

    GET方法不支持.我出错的原因在于,在JSP中我希望超链接a以post方式提交,但是这里写js代码时出错. <script type="text/javascript"> ...

  7. P3374 【模板】树状数组 1

    树状数组模板题,用cdq分治做 cdq分治: 分:把l到r分成两个区间操作 治:对每个分出来的区间进行操作 但是cdq分治和一般分治不同的是,一般的分治左右两个区间互不干扰,但是cdq分治处理的是区间 ...

  8. 教你如何使用node.js制作代理服务器

    var http=require("http"); var url=require("url"); var server=http.createServer(f ...

  9. IOS-真机相关

    真机调试 Certificates  证书 Identifiers  标示符 Profiles  描述文件 一. 证书,安装在电脑上,只有安装了证书的电脑,才有可能进行真机调试. - All - De ...

  10. 获取Activity的返回参数

    一.新建一个空的工程 二.在主界面中添加一个按钮和一个TextView组件 三.新建一个空的activity,命名为TheAty,并添加一个按钮和一个EditText组件 四.重写TheAty的源代码 ...