注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

东东的博客

江南烟雨,同大家一起分享

 
 
 

日志

 
 

ProgressDialog使用心得  

2009-10-29 17:19:31|  分类: android相关 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

                                                                                                                                   (原创,转载请注明出处)

    为了安抚用户等待的焦急心情,我们用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中注册了关闭窗口的条件和关闭动作(调用静态方法)。然后在这个activityonCreat()方法里的最后面加上发送消息的代码:

Message message = mHandler.obtainMessage(EVENT_TIME_TO_CHANGE_IMAGE);


      mHandler.sendMessage(message);


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

  评论这张
 
阅读(2511)| 评论(1)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017