Android - Скрыть все показанные тостовые сообщения - PullRequest
53 голосов
/ 03 мая 2010

Как удалить все всплывающие сообщения, отображаемые в данный момент?

В моем приложении есть список, когда пользователь нажимает на элемент, отображается сообщение с тостом, 10 предметов - 10 тостов.

Таким образом, если пользователь нажимает 10 раз, а затем нажимает кнопку меню, ему нужно подождать несколько секунд, пока он не сможет прочитать текст пункта меню.

Так не должно быть :)

Ответы [ 15 ]

78 голосов
/ 20 декабря 2010

Моим решением было инициализировать один тост в упражнении. Затем меняем его текст при каждом клике.

Toast mToast = Toast.makeText(this, "", Toast.LENGTH_SHORT);
if (a) {
  mToast.setText("This is a");
  mToast.show();
} else if (b) {
  mToast.setText("This is b");
  mToast.show();
}
31 голосов
/ 03 мая 2010

как отключить все тостовые сообщения процесс в настоящее время?

Вы можете отменить отдельного Toasts, вызвав cancel() объекта Toast. AFAIK, у тебя нет возможности отменить все выдающиеся Toasts.

12 голосов
/ 04 июля 2012

Как насчет проверки, если тост уже отображается?

private Toast toast;
...
void showToast() {
   if (toast == null || toast.getView().getWindowVisibility() != View.VISIBLE) {
      toast = Toast.makeText(getActivity(), "Toast!", Toast.LENGTH_LONG);
      toast.show();
   }
}
8 голосов
/ 22 марта 2011

Решение Мудара прекрасно сработало для меня по аналогичной проблеме - после нескольких button кликов у меня были разные тосты, сложенные в отставание.

Один экземпляр Toast с различными setText()s и show() s был именно тем ответом, который я искал - предыдущее сообщение отменяется, как только нажимается новая кнопка. Пятно на

Просто для справки, вот что я сделал ...

In OnCreate:

    final Toast myToast = Toast.makeText(getBaseContext(), "", Toast.LENGTH_SHORT);

Внутри каждого OnClick:

myToast.setText(R.string.toast1);
myToast.show();
4 голосов
/ 16 ноября 2015

Мое решение состоит в том, чтобы сохранить все ссылки на тосты в списке и создать метод для отмены всех их при необходимости:

private ArrayList<Toast> msjsToast = new ArrayList<Toast>();

private void killAllToast(){
    for(Toast t:msjsToast){
        if(t!=null) {
            t.cancel();
        }
    }
    msjsToast.clear();
}

Когда вы создаете тост, делайте так и сохраняйте ссылку:

Toast t = Toast.makeText(context, "Download error: xx", Toast.LENGTH_LONG);
t.show();
msjsToast.addToast(t);

Когда вам нужно удалить их:

killAllToast();

Вы можете создать это как статический метод в глобальном классе и использовать его для уничтожения всех тостов приложения.

3 голосов
/ 12 марта 2016

Вот мой простой ответ на проблему:

Сначала в своей деятельности создайте глобальный Toast объект.

    private Toast example;

Теперь, когда вы хотите вызвать новое сообщение Toast, просто сделайте это:

if(buttonClicked) {
    example.cancel();
    example = Toast.makeText(this, "" , Toast.LENGTH_SHORT);
    example.setText("Button Clicked");
    example.show();
}

При этом все тосты сохраняются в одном центральном тосте и удаляются из спама. Это быстрое грубое решение, так что, возможно, есть более элегантный способ сделать это.

3 голосов
/ 26 апреля 2012

Мне кажется, я нашел способ сделать так, чтобы тосты не стояли у меня в очереди. Мысль я бы поделился.

эта часть идет сверху.

private Toast msg;    

Эта часть входит в мой setOnTouchListener ()

* +1007 *

Это скорее взлом, чем что-либо еще. Но я показываю тост-сообщение каждый раз, когда кто-то добавляет часть моего приложения. И если они сойдут с ума, нажав на любимую кнопку, они сойдут с ума от сообщений тостов. Но не больше. Он будет ждать 2 секунды, а затем установит для моего объекта toast значение null и позволит снова отобразить его.

2 голосов
/ 16 июня 2018

Создайте объект Toast вне функции onClick и используйте код ниже. Он остановит любой существующий тост и запустит последний тост.

Toast mToast;

public void onClick(String abc) {

    if(mToast!=null)
        mToast.cancel();
    Context context = this;
    mToast = Toast.makeText(context, abc, Toast.LENGTH_SHORT);
    mToast.show();
}
1 голос
/ 31 июля 2013

Вот как я это делаю.

Toast toast;   

if(toast==null)
        toast=Toast.makeText(getApplicationContext(),R.string.act_now_private_post_text,Toast.LENGTH_LONG);
        else
            toast.setText(R.string.act_now_private_post_text);
        toast.setGravity(Gravity.CENTER_VERTICAL|Gravity.CENTER_HORIZONTAL,10,10);
        toast.show();
0 голосов
/ 26 июля 2018

Как насчет этого??

private Toast toast;

...
// Methods for short toast messages and long toast messages

    private void showShortToast(String message) {
        if(null != toast) toast.cancel();
        (toast = Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT)).show();
    }

    private void showLongToast(String message) {
        if(null != toast) toast.cancel();
        (toast = Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG)).show();
    }

и при onPause ()

@Override
    protected void onPause() {
...
if(null != toast) toast.cancel();
..
}
...