2015-08-21 2 views
2

Я хочу показать два разных тоста. Второй должен появиться через 8 секунд после второго.дисплей двух разных тостов

Я попытался закодировать это:

@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

Вы не можете просто остановить поток пользовательского интерфейса. Для этого используйте обработчик (способ 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? возможно, вы дадите мне еще одну идею, спасибо снова – 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 перед использованием обработчика, а второй - внутри runnable. – JacksOnF1re

+0

@ JacksOnF1re действительно действительно. Обновлено –

0

Остановка нити пользовательского интерфейса невозможна. Для этого вам нужно использовать некоторые обработчики.

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

    } 
}, 8000); 
0

I Проще говоря

@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(); 
} 

И это сработало ... Но Мое предложение вы не должны остановить поток пользовательского интерфейса, использование Handler, как @IntelliJ Amiya сказал.

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); 
} 
Смежные вопросы