Android用于提示等待的ProgressDialog

原文地址:http://blog.csdn.net/wleing/article/details/6086321

为了安抚用户等待的焦急心情,我们用ProgressDialog。它的用法书上有例子,就是:

[java]  view plain copy
 
  1. ProgressDialog myDialog = ProgressDialog.show(YourClass.this, "正在连接服务器..", "连接中,请稍后..", true, true);  
  2. handler.post(mTasks);  


它的用法一般都是在用intent开启一个新的activity的时候,你直接加上这句话,是达不到你想要的效果的。
你必须这样用:把用intent开启activity的这件事放在一个Runnable对象的run()方法中,然后用handler.post()方法来运行这个线程。
代码如下:

[java]  view plain copy
 
  1. Handler handler = new Handler();  
  2. Runnable mTasks = new Runnable() {  
  3.   public void run() {  
  4.     Intent intent = new Intent();  
  5.     intent.setClass(YourClass .this,EditHome.class);  
  6.     startActivity(intent);  
  7.    }  
  8. };  
  9. final ProgressDialog myDialog = ProgressDialog.show(YourClass.this, "正在连接服务器..", "连接中,请稍后..", true, true);  
  10. handler.post(mTasks);  


这样算是达到我们要的效果了,可是,那个ProgressDialog的窗口并没有关闭,所以后面还要加上myDialog.dismiss();
但这样的话,窗口出来就消失,我们又看不到ProgressDialog了...所以,我们要用一个线程来控制窗口消失的时间:

[java]  view plain copy
 
  1. new Thread() {  
  2.    public void run() {  
  3.      try{  
  4.        sleep(5000);  
  5.      }catch(InterruptedException e){  
  6.          e.printStackTrace();  
  7.      }  
  8.      myDialog.dismiss();  
  9.    }}.start();  

那个sleep的时间是你估算下一个activity显示出来所需要的时间。OK了。
但显然这样做是不科学的。科学的做法是:首先在原avtivity中添加一个关闭Dialog的静态方法:

[java]  view plain copy
 
  1. public static void closeProgressDialog() {  
  2.    myDialog.dismiss();  
  3. }  

然后在目标的activity中添加两个成员变量:

[java]  view plain copy
 
  1. private static final int EVENT_TIME_TO_CHANGE_IMAGE = 100;  
  2. private Handler mHandler = new Handler() {  
  3. public void handleMessage(Message msg) {  
  4.       switch(msg.what){  
  5.         case EVENT_TIME_TO_CHANGE_IMAGE:  
  6.              YourPrimaryClass.closeProgressDialog();  
  7.         break;  
  8.      }  
  9. }};  

其中Handler中注册了关闭窗口的条件和关闭动作(调用静态方法)。然后在这个activity的onCreat()方法里的最后面加上发送消息的代码:

[java]  view plain copy
 
  1. Message message = mHandler.obtainMessage(EVENT_TIME_TO_CHANGE_IMAGE);  
  2. mHandler.sendMessage(message);  

这样就能保证是在目标activity全部显现出来之后关闭那个progressDialog了。

你可能感兴趣的:(ProgressDialog)