ProgressDialog使用

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

ProgressDialog myDialog = ProgressDialog.show(YourClass.this, "", "请稍后", true, true); handler.post(mTasks);

 

然而,我们用它一般都是在用 intent 开启一个新的 activity 的时候,你直接加上这句话,是达不到你想要的效果的。

你必须这样用:把用 intent 开启 activity 的这件事放在一个 Runnable 对象的 run() 方法中,然后用 handler.post() 方法来运行这个线程。代码如下:

Handler handler = new Handler(); Runnable mTasks = new Runnable() { public void run() { Intent intent = new Intent(); intent.setClass(YourClass .this, EditHome.class); startActivity(intent); } }; final ProgressDialog myDialog = ProgressDialog.show(YourClass .this, "", "请稍后", true, true); handler.post(mTasks);

 

这样算是达到我们要的效果了,可是,那个 ProgressDialog 的窗口并没有关闭,所以后面还要加上

myDialog.dismiss();

 

但这样的话,窗口出来就消失,我们又看不到 ProgressDialog ... 所以,我们要用一个线程来控制窗口消失的时间

new Thread() { public void run() { try { sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } myDialog.dismiss(); } }.start();

 

那个 sleep 的时间是你估算下一个 activity 显示出来所需要的时间。 OK 了。

   但显然这样做是不科学的。科学的做法是:首先在原 avtivity 中添加一个关闭 Dialog 的静态方法:

public static void closeProgressDialog() { myDialog.dismiss(); }

 

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

private static final int EVENT_TIME_TO_CHANGE_IMAGE = 100; private Handler mHandler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) { case EVENT_TIME_TO_CHANGE_IMAGE: YourPrimaryClass.closeProgressDialog(); break; } } };

 

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

Message message = mHandler.obtainMessage(EVENT_TIME_TO_CHANGE_IMAGE); mHandler.sendMessage(message);

 

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

你可能感兴趣的:(ProgressDialog使用)