Как отменить Toast, созданный другим методом на Android?

У меня есть следующий код:

private Toast movieRecordToast; private void displayNextMovie() { if (movieRecordToast != null) movieRecordToast.cancel(); // cancel previous Toast (if user changes movies too often) movieRecordToast = Toast.makeText(getApplicationContext(), "Next", Toast.LENGTH_SHORT); movieRecordToast.show(); private void displayPrevMovie() { if (movieRecordToast != null) movieRecordToast.cancel(); movieRecordToast = Toast.makeText(getApplicationContext(), "Prev", Toast.LENGTH_SHORT); movieRecordToast.show(); 

Но если displayNextMovie вызывается быстро несколько раз, а затем displayPrevMovie , «Next» Toast все еще отображается и только после этого отображается «Prev». Похоже, что отмена не работает должным образом.

Solutions Collecting From Web of "Как отменить Toast, созданный другим методом на Android?"

Вместо того, чтобы создавать новый объект Toast каждый раз, когда вам нужен новый текст, вы можете легко удерживать только один объект Toast и отменить текущий Toast когда захотите. Перед отображением следующего Toast.setText() вы можете изменить текст с Toast.setText() функции Toast.setText() .

Образец кода:

 private Toast mToastText; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // Create the object once. mToastText = Toast.makeText(this, "", Toast.LENGTH_SHORT); } private void displayText(final String message) { mToastText.cancel(); mToastText.setText(message); mToastText.show(); } 

Я думаю, что есть много способов, которыми вы можете добиться отображения следующей / предыдущей информации пользователю. Я бы полностью разорвал тосты и обновил текст TextView с именем следующего / предыдущего фильма. Это устранит вашу проблему, а также IMHO сделает для лучшего пользовательского интерфейса.

Однако, если ваши требования к дизайну запрашивают уведомления о тостах, попробуйте:

  private Toast nextMovieRecordToast; private Toast prevMovieRecordToast; private void displayNextMovie() { if (prevMovieRecordToast != null) prevMovieRecordToast.cancel(); // cancel previous Toast (if user changes movies too often) nextMovieRecordToast = Toast.makeText(getApplicationContext(), "Next", Toast.LENGTH_SHORT); nextMovieRecordToast.show();} private void displayPrevMovie() { if (nextMovieRecordToast != null) nextMovieRecordToast.cancel(); prevMovieRecordToast = Toast.makeText(getApplicationContext(), "Prev", Toast.LENGTH_SHORT); prevMovieRecordToast.show(); } 

Решение wroclai отлично! Однако он зажимает Toast, когда вы отправляете длинный тост для сообщения на короткий, и наоборот. Исправить это, вместо того, чтобы использовать предыдущий объект, воссоздайте его. Поэтому вместо этой строки:
mToastText.setText(message);
Напишите: myToast = Toast.makeText(this, message, Toast.LENGTH_SHORT);
Анимация также выглядит лучше 🙂