【问题标题】:How to dismiss a ProgressDialog after a specific time如何在特定时间后关闭 ProgressDialog
【发布时间】:2014-05-19 21:11:06
【问题描述】:

如下代码所示,如​​果Progressdialoge存在,我想给它设置一条新消息,3秒后关闭。

在运行时,发生的情况是,旧消息保持设置为 progressdialog 并持续 3 秒,然后 progressdialog 在没有设置新消息的情况下关闭。有什么建议吗?

代码:

if ( (location != null) && (mProgreeDialoge != null) ){
            mProgreeDialoge.setMessage(PROGRESS_DIALOGUE_MSG01);
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

更新

if ( (location != null) && (mProgreeDialoge != null) ){
            mProgreeDialoge.setMessage(PROGRESS_DIALOGUE_MSG01);
            new Handler().postDelayed(new Runnable() {

                @Override
                public void run() {
                    // TODO Auto-generated method stub
                    mProgreeDialoge.dismiss();
                }
            }, FREEZE_PROGRESS_DIALOGUE_TIME);

【问题讨论】:

标签: java android multithreading


【解决方案1】:

我会为此使用Handler,并让它延迟 3000 毫秒后发布消息。

下面是一个简单的Handler 实现,您可以使用int 参数和obj 成员来扩展/自定义它:

private final Handler mHandler = new Handler()
{
    @Override
    public void handleMessage(Message msg)
    {
        super.handleMessage(msg);
        if (mProgreeDialoge.isShowing())
            mProgreeDialoge.dismiss();
    }
};

然后在显示进度对话框后,只需延迟 3 秒向处理程序发送一条消息:

mProgreeDialoge.setMessage(PROGRESS_DIALOGUE_MSG01);
mHandler.sendMessageDelayed(new Message(), 3000);

【讨论】:

  • 在使用处理程序的概念中,它现在对我有用,但与您的方式有点不同。请看更新
  • @Amr,当然,如果你不想重用处理程序,或者检查它的成员(arg1arg2obj),不扩展它更简单(尽管你需要创建一个Runnable 才能在不同的线程上运行。很高兴你成功了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-23
  • 1970-01-01
相关资源
最近更新 更多