2011-05-11 139 views
3

什么时候进度对话框不显示在android中?我想知道当上述可能发生的情况:在我的案件的进度对话框不是在这种情况下,显示进度对话框不显示在Android?

func{ 
    progressdialog.show(); 
    .... 
    ..... 
    anotherfunction(); 
    listview.setAdapter(); 
    progressdialog.dismiss(); 
    } 

什么是拇指与对话框中的一般规则?

谢谢你提前。

EDIT 当执行.show()命令进度对话框应显示。但是当调用otherfucntion()时,progressdialog的先前命令是否显示停止?

+0

什么线程正在执行的代码?你有没有在日志中得到任何错误信息? progressdialog是如何创建的? – Kaj 2011-05-11 06:55:30

+0

我正在主UI线程中执行它。我没有收到错误消息,只是没有显示进度对话框,它开始执行后的语句......并没有显示进度对话框而成功完成。 – user590849 2011-05-11 07:00:13

回答

3

好像你需要使用AsyncTask的UI(包括progressDialog)如果UI线程仍然忙于将不会更新。 SO中有很多例子。

而作为一个经验法则 - 如果你需要的进度对话框 - 你需要的AsyncTask

这不是说任何命令都会停止,只是如果你在UI线程上执行一系列方法,UI可能不会被更新,直到序列结束,这是在progressDialog.dismiss()之后,所以progressDialog应该不再显示。

+0

但如果我更新像填充列表视图的UI呢? – user590849 2011-05-11 07:00:44

+0

做什么,你可以在后台(如从DB /网络/联系人/等采集数据),只是在UI线程的最后一部分。请阅读AsyncTask文档(请参阅我的答案中的链接),我相信你会发现这很有帮助。 – MByD 2011-05-11 07:02:52

+0

什么时候UI线程变得太忙?这是否意味着如果我的UI线程中的功能较少,我可以在UI线程中使用进度对话框?实际发生了什么? – user590849 2011-05-11 07:04:14

1

我认为你必须做你的活动。

ProgressDialog _progressDialog = ProgressDialog.show(this,"Saving Data","Please wait......"); 
settintAdater(); 

private void settingAdater(){ 

     Thread _thread = new Thread(){ 

      public void run() { 

       Message _msg = new Message(); 
       _msg.what = 1; 
       // Do your task where you want to rerieve data to set in adapet 
       YourCalss.this._handle.sendMessage(_msg); 
      }; 
     }; 
     _thread.start(); 
    } 
Handler _handle = new Handler(){ 

     public void handleMessage(Message msg) { 

      switch(msg.what){ 

       case 1: 
        _progressDialog.dismiss(); 
        listview.setAdapter(); 
      } 
     } 
} 
+0

正确,我以前这样做过。但我想知道什么时候可以这样做 - 当我的UI线程中有很多函数,或者甚至有少量函数时? – user590849 2011-05-11 07:12:30

+0

您可以使用处理程序在任何情况下,因为你只需要创建一个后台操作和处理程序来处理你的活动的所有后台运行一个线程。在AsynTask中,您必须为每个操作创建单独的类,因此不方便。 – Sujit 2011-05-11 07:26:20

0

要显示ProgressDialog使用

ProgressDialog progressDialog = ProgressDialog.show(PrintMain.this, "", 
        "Uploading Document. Please wait...", true); 

而当你完成你的任务使用

progressDialog.dismiss(); 

驳回ProgressDialog ..

你可以打电话显示ProgressDialog在onPreExecute方法的AsyncTask类中,当你完成关闭它在onPostExecute方法