Intereting Posts
Как сохранить соотношение сторон изображения, если изображение сначала растягивается, чтобы заполнить родительский Можно ли заблокировать тег NFC, а затем разблокировать и записать данные еще раз? SSL взаимная аутентификация FAIL на Android Client принимает сертификат серверов, но сервер не получает сертификат клиента Динамически добавленные виды исчезают при ориентации на Android Android 4 ICS Ice Cream Sandwich – iframe, который содержит форму Изображения, не отображаемые на эмуляторе Android для приложения phonegap / jquerymobile Как получить программный список цветов из градиента на Android Как создать анимацию перемещения / изменения размера в Android? Как добавить размытый эффект на рисоваемое изображение через XML в android Возможно ли, чтобы устройство Android прочитало информацию от контроллера wii и nunchuck? Результаты пользовательского кругового обнаружения в «java.lang.UnsupportedOperationException» при приостановке? Добавить представление в конце Webview Что сообщение logcat: «E / MoreInfoHPW_ViewGroup (2905): Родительский взгляд не является TextView» означает? Android: как продлить мой класс активности с помощью RoboActivity + ActionBarActivity Android AssertJ 1.0.0 с Android-градиентом 1.1.1

Лучший способ избежать накопления тоста в Android

В Android, когда я создаю Toast и показываю их, они появляются последовательно. Проблема в том, что у меня есть кнопка, которая проверяет некоторые поля, и если пользователь вводит неверные данные, отображается тост. Если пользователь несколько раз нажимает кнопку, тосты накапливаются, и сообщение не исчезает на пару секунд.

Какой лучший способ избежать этого?

  • Могу ли я сохранить ссылку на последний тост и удалить его, прежде чем создавать новый?
  • Должен ли я использовать тот же Toast для всех сообщений?
  • Могу ли я использовать любой метод, который очищает все приложения Toasts до создания и отображения нового?

Solutions Collecting From Web of "Лучший способ избежать накопления тоста в Android"

Вы можете использовать метод cancel() Toast чтобы закрыть показ Toast.

Используйте переменную, чтобы сохранить ссылку на каждый Toast, пока вы ее показываете, и просто вызовите функцию cancel() прежде чем показывать другую.

 private Toast mToast = null; // <-- keep this in your Activity or even in a custom Application class //... show one Toast if (mToast != null) mToast.cancel(); mToast = Toast.makeText(context, text, duration); mToast.show(); //... show another Toast if (mToast != null) mToast.cancel(); mToast = Toast.makeText(context, text, duration); mToast.show(); // and so on. 

Вы могли бы даже обернуть это в маленький класс:

 public class SingleToast { private static Toast mToast; public static void show(Context context, String text, int duration) { if (mToast != null) mToast.cancel(); mToast = Toast.makeText(context, text, duration); mToast.show(); } } 

И используйте его в своем коде так:

 SingleToast.show(this, "Hello World", Toast.LENGTH_LONG); 

//

В этом упражнении есть только один тост.

 private Toast toast = null; 

Затем просто проверьте, есть ли показ Toast перед созданием другого.

 if (toast == null || !toast.getView().isShown()) { if (toast != null) { toast.cancel(); } toast = Toast.makeToast("Your text", Toast.LENGTH).show(); } 

Вы даже можете сделать этот последний фрагмент в приватном методе showToast(text) для кода рефакторинга, если вам нужно отображать разные текстовые сообщения.