【问题标题】:Android - Showing AlertDialog/Toast right after ProgressDialog finishesAndroid - 在 ProgressDialog 完成后立即显示 AlertDialog/Toast
【发布时间】:2011-09-09 10:45:25
【问题描述】:

我是Android编程的新手,所以请原谅我的愚蠢问题>,

@Override
public void onClick(View v) {
    switch (v.getId()) {
    case R.id.btnDoRegister:
    pd = ProgressDialog.show(RegisterActivity.this, "",
                    "Registering with the server..");
            new Thread() {
                public void run() {
                    Looper.prepare();
                    //(hopefully) thread-safe implementations here
                    handler.sendEmptyMessage(0);
                }
            }.start();
            if (status == registered) {
                //show AlertDialog/Toast here
                finish();
            } else if (status == notRegistered) {
                //show AlertDialog/Toast here
            } 
     break; 
   }

更令人困惑的是,当我尝试调试它时,LogCat 什么也没有显示,并且一切运行正常(警报/toast 显示为预期)。但是当我尝试正常运行它时,不知何故我觉得它运行得太快并且没有正确显示我的警报/吐司(听起来很愚蠢)。非常感谢您的帮助。

【问题讨论】:

  • k,您在哪个线程中关闭了进度对话框?只显示那个 coe。

标签: android multithreading android-alertdialog progressdialog toast


【解决方案1】:

在handler的handleMessage方法中显示AlertDialog/Toast会更合适,

static Handler handler = new Handler() {
       public void handleMessage(Message msg) { ...  }};

【讨论】:

  • 你是对的。我在线程的Handler里面调用AlertDialog/Toast后,就正常了!非常感谢您的帮助:)
【解决方案2】:

发生这种情况是因为,当您运行它时,您的线程很快就会完成它的工作。但是当你像其他程序语言一样调试它时,你一个接一个地顺序执行事情。但是如果你仍然希望它长时间显示对话框,请这样做(虽然它没有实际用途)

new Thread() {
                public void run() {
                    Looper.prepare();
                    //(hopefully) thread-safe implementations here
                    handler.sendEmptyMessage(0);
                     Thread.sleep(3000);
                }
            }.start();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多