2015-08-21 84 views
2

我想显示两个不同的Toast。第二个应在第二个之后8秒出现。显示两个不同Toast

我试图实现代码:

@Override 
public void onReceive(Context context, Intent intent) { 
    Toast toast1 = new Toast(context); 
    Toast toast2 = new Toast(context); 

    //toast1 
    toast1.makeText(context, "First toast ", Toast.LENGTH_SHORT).show(); 

    //wait for 8 seconds 
     try { 
      Thread.sleep(8000); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 

    //toast2 
    toast2.makeText(context, "Toast2 ", Toast.LENGTH_SHORT).show(); 

不幸的是,只出现第二个面包。我不知道这个错误是由于我错误地使用烤面包还是我错误地使用了线程!

谢谢

+2

这是有趣的,看看@ JackOnF1re先贴了正确的答案和其他人只是复制粘贴。 O_ @ – JanithaR

回答

3

你不能停止UI线程。 为此,请使用处理程序(Android方式)或TimerTask(Java方式)。

Handler h = new Handler(); 
    h.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      Toast.makeText(someContext, "someText", Toast.LENGTH_SHORT).show(); 
     } 
    }, 8000); 
+1

谢谢!有用!你可以请看看这个问题http://stackoverflow.com/questions/32129959/callbacks-in-android-to-program-beacon?也许你给我另一个想法,再次thanx – fujitsu4

1

您可以使用Handler

A Handler allows you to send and process Message and Runnable objects与线程的MessageQueue相关联。每个Handler实例都与单个线程和该线程的消息队列相关联。

@Override 
    public void onReceive(Context context, Intent intent) { 
     Toast toast1 = new Toast(context); 
     Toast toast2 = new Toast(context); 

     toast1.makeText(context, "First toast ", Toast.LENGTH_SHORT).show(); 

     Handler handler = new Handler(); 
       handler.postDelayed(new Runnable() { 
        public void run() { 

        toast2.makeText(context, "Toast2 ", Toast.LENGTH_SHORT).show();  

        } 
       }, 8000); 
+0

你的答案是“种”错了。 :)如果您使用postDelayed,则需要在处理程序使用前发送第一个Toast,并在可运行内部发送第二个Toast。 – JacksOnF1re

+0

@ JacksOnF1re的确的确如此。现在更新 –

0

停止UI线程是不可能的。你必须为此使用一些处理程序。

Handler handler = new Handler(); 
handler.postDelayed(new Runnable() { 
    public void run() { 
      toast1.makeText(context, "First toast ", Toast.LENGTH_SHORT).show(); 

    } 
}, 8000); 
0

我干脆把

@Override 
public void onReceive(Context context, Intent intent) { 
     Toast.makeText(context,"First",Toast.LENGTH_LONG).show(); 
     try{ 
      Thread.sleep(2000); 
     }catch(Exception e){ 

     } 
     Toast.makeText(context,"Second",Toast.LENGTH_LONG).show(); 
} 

和它的工作... 但我的建议是,你不应该停止UI线程,使用处理程序@IntelliJ阿米亚·说。

0

与此修改代码:

@Override 
public void onReceive(Context context, Intent intent) { 
    Toast toast1 = new Toast(context); 
    Toast toast2 = new Toast(context); 

    //toast1 
    toast1.makeText(context, "First toast", Toast.LENGTH_SHORT).show(); 

    //toast2 
    Handler handler = new Handler(); 
    handler.postDelayed(new Runnable() { 
     public void run() { 
      toast2.makeText(context, "Second toast", Toast.LENGTH_SHORT).show(); 
     } 
    }, 8000); 
}