Лучший способ избежать накопления тоста в 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) для кода рефакторинга, если вам нужно отображать разные текстовые сообщения.