2013-02-11 2 views
11

Это мой пример кода:Как прекратить отображение сообщения из Toast, когда приложение закрыто?

public class MainActivity extends Activity { 

    Button buttonClick; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     buttonClick = (Button) findViewById(R.id.buttonClick); 
     buttonClick.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       Toast.makeText(MainActivity.this, "Here is the Toast", Toast.LENGTH_SHORT).show(); 
      } 
     }); 
    } 

} 

Когда я когда-либо нажать на кнопку, появится сообщение Toast. Хорошо.

Мой вопрос:

Когда я нажимаю multiple times на кнопку, а затем закройте приложение, затем Тосты продолжают начиная свою работу отображения сообщений.

И я не хочу этого.

Я хочу, чтобы приложение было закрыто, и Тосты также должны перестать отображать свои сообщения.

Может кто-нибудь сказать мне, что я должен сделать для этого ???

+0

вы можете сделать это при закрытии приложения: http: // stackoverflow.com/questions/4395062/how-to-cancel-toast –

+0

Возможный дубликат [Android cancel Toast при выходе из приложения и при показе тоста] (http://stackoverflow.com/questions/16098151/android-cancel-toast -when-exiting-the-app-and-when-toast-is-being-показано) –

ответ

9

Я хочу, если приложение закрыто, то Тост должен также прекратить отображение сообщения.

В вашем случае вызова cancel() на Toast объект, чтобы отменить его в onDestroy() метода.

Пример: similar.

Обновлено!

Я протестировал решение OP, но никакого результата.

.hide() и .cancel() метод доступен для Toast, но, похоже, они не работают. Решение состоит в том, что вы должны создать свой собственный пользовательский вид, который действует как Toast, а затем вы можете отменить все Toasts, когда заканчивается Activity.

+1

его истинный man.good ответ. – kyogs

+0

Необходимо создать пользовательский вид, чтобы отменить только Toast. Кажется, это не очень хороший вариант. –

+0

У вас нет другого выбора. – RobinHood

4

Храните ссылку на свой тост-объект. В вашем onDestroy, если тост не равен нулю, тогда наберите cancel().

+0

Как сохранить ссылку на объект Toast. Тост статичен. Я не могу это понять –

+1

Нет, это не так. Toast.makeText возвращает экземпляр типа Toast. Сохрани это. Это то, что вам нужно отменить. –

1

Попробуйте использовать функцию finish() в вашей функции OnCreate() при некоторых условиях. Надеюсь, что это поможет вам.

+0

bhai ... nice bhai ... –

0

Попробуйте это,

Вы можете отменить Toast показ с помощью этого кода.

final Toast toast = Toast.makeText(getApplicationContext(), "This message will disappear  in half second", Toast.LENGTH_SHORT); 
toast.show(); 

Handler handler = new Handler(); 
    handler.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      toast.cancel(); 
     } 
}, 500); 
3

Возможно, вы захотите отменить Toast, когда ваше приложение не видно, поэтому я отменил его на методе 'onStop()'.

Вот он идет:

public class MainActivity extends Activity { 
    private Toast toast = null; 
    Button buttonClick; 

    @SuppressLint("ShowToast") 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     toast = Toast.makeText(getApplicationContext(), "", Toast.LENGTH_LONG); 
     buttonClick = (Button) findViewById(R.id.buttonClick); 
     buttonClick.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       toast.setText("My toast!"); 
       toast.show(); 
      } 
     }); 
    } 

    @Override 
    protected void onStop() { 
     super.onStop(); 
     toast.cancel(); 
    } 

} 

Edit: Обновлено, он должен работать, как ОП предназначен прямо сейчас.

+0

Не работает, проверено! – RobinHood

+0

Вы тестируете многократное нажатие кнопки, а затем изменение приложения? Это сохраняет ссылку на последний Toast, так что он отменяет последний. Возможно, вы хотите отменить предыдущие тосты, если они все еще видны, так что они не сохраняют стек –

+0

. Я отредактировал его так, чтобы он отменял предыдущие тосты. –

Смежные вопросы