Подтвердить что ты не робот

Как прекратить отображение сообщения из 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 на кнопке, а затем закрываю приложение, то Toasts продолжают работу над отображением сообщений.

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

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

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

4b9b3361

Ответ 1

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

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

Вот пример аналогичный.

Обновлено!

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

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

Ответ 2

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

Ответ 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();
    }

}

Изменить: Обновлено, он должен работать как OP, предназначенный сейчас.

Ответ 4

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

Ответ 5

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

Вы можете отменить 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);