Android - 在ProgressDialog完成后立即显示AlertDialog / Toast

时间:2011-09-09 10:45:26

标签: android multithreading alertdialog progressdialog toast

我对Android编程很陌生,所以请原谅我的愚蠢问题>,< 就像标题所说,我想在ProgressDialog完成后立即显示AlertDialog / Toast。我怎么能以正确的方式做到这一点?注意:我的处理程序只是关闭ProgressDialog(pd.dismissDialog())。

@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按预期显示)。但是当我试图正常运行时,不知怎的,我觉得这个运行得太快而且没有正确显示我的警报/吐司(听起来很愚蠢)。非常感谢你的帮助。

2 个答案:

答案 0 :(得分:1)

更适合在处理程序的handleMessage方法中显示AlertDialog / Toast,

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

答案 1 :(得分:0)

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

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