2015-08-21 104 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); 
}