0
点赞
收藏
分享

微信扫一扫

Pro Android学习笔记(九四):AsyncTask(3):ProgressDialog



Progress Dialog小例子

我们通过IReportBack接口隐藏了Activity,但是有时我们需要弹框等操作,就需要Context。下面的例子是在执行的过程中弹出Progress Dialog来提示正在处理中。

Pro Android学习笔记(九四):AsyncTask(3):ProgressDialog_ide

和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进度框,如图所示:

Pro Android学习笔记(九四):AsyncTask(3):ProgressDialog_Android_02

相关代码如下:

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小例子中下载。


举报

相关推荐

0 条评论