Intereting Posts
Часы Emulator не соответствуют часам системы хоста WebView не показывает JSAlert на устройствах Lollipop Как вручную обновить браузер Android с помощью новейшего (ночного) webkit? Исключение из памяти Исключение при применении фильтров к изображениям (Android) Увеличьте продолжительность непрерывного просмотра зрителя (дубликат) Как управлять настраиваемой настройкой предпочтений Удалить системный кеш на android 6.0 Как узнать, сколько DPI имеет устройство? Элементы в раскрывающемся списке AutoCompleteTextView не отображаются. Как изменить свой цвет ..? Android получает ответ после 403 в HttpClient Как реализовать вертикально скользящий фрагмент / панель, например, музыку Google в приложении для Android? Могу ли я изменить владельца группы в постоянной группе в Wi-Fi Direct? Как сделать org.apache.http.legacy работать с ProGuard (azure mobile services)? Несколько значений стиля внутри представления Учебники или введение для написания простого языка сценариев?

Как отменить 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);
Анимация также выглядит лучше 🙂