2012-08-09 97 views
1

当ProgressDialog运行时,是否可以显示Toast?如果是这样,有一些关于如何做的例子?ProgressDialog正在运行时运行Toast

谢谢。

我不工作电流代码:

final ProgressDialog pd = ProgressDialog.show(
         BotonesServicio.this, "Medidas", 
         "Comprobando datos"); 
       new Thread(new Runnable() { 
        public void run() { 
        Toast.makeText(FacturasIFirmar.this, 
         "Trying to show toast", Toast.LENGTH_LONG) 
          .show(); 

         pd.dismiss(); 
        } 
       }).start(); 
+2

你应该可以像你期望的那样做到这一点。你有没有工作的代码?你有什么尝试? – maxko87 2012-08-09 16:56:27

+1

上下文很重要,当两者的上下文相同时都是可能的。首先你应该尝试。 – 2012-08-09 17:14:10

+0

我已更新我的问题。 – HaOx 2012-08-09 17:22:56

回答

2

ProgressDialog“冻结”线程,因此所有其他行动必须在一个单独的线程执行。你必须在UI线程上创建你的Toast。

尝试这样:

ProgressDialog dialog = new ProgressDialog(context); 
    final Toast toast = Toast.makeText(context, "text", Toast.LENGTH_LONG); 
    Thread thread = new Thread(new Runnable() { 

     public void run() { 
      //Calculations here 
      try { 

       Thread.sleep(2000); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
      toast.show(); 
     } 

    }); 
    thread.start(); 
    dialog.show(); 

如果你想与UI线程进行通信,你应该使用的AsyncTask或将消息发送到处理程序,它执行的UI线程上的操作常规线程。

祝你好运!