Подтвердить что ты не робот

Как отменить тост

Я разработал приложение для Android, и я столкнулся с проблемой с Toast. Предположим, что я показываю Toast, он отображается в окне приложения. Когда появляется диалоговое окно, тост не исчезает мгновенно.

Я хочу знать, как я могу отменить тост.

4b9b3361

Ответ 1

Toast.makeText возвращает объект Toast. Вызовите cancel() на этом объекте, чтобы отменить его.

Ответ 2

Самая короткая продолжительность, которую вы можете указать для тоста, - Toast.LENGTH_SHORT, которая имеет значение 0, но на самом деле 2000 milliseconds long. Если вы хотите, чтобы это было короче, попробуйте следующее:

    final Toast toast = Toast.makeText(ctx, "This message will disappear in 1 second", Toast.LENGTH_SHORT);
    toast.show();

    Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
           @Override
           public void run() {
               toast.cancel(); 
           }
    }, 1000); //specify delay here that is shorter than Toast.LENGTH_SHORT

Ответ 3

Я думаю, что нет необходимости создавать собственный тост.

Создайте только один экземпляр класса Toast. Мы просто задаем текст тоста с помощью toast.setText("string") и вызываем метод toast.cancel() в методе onDestroy().

Отрывок рабочего кода следующим образом:

package co.toast;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class ShowToastActivity extends Activity {
    private Toast toast = null;
    Button btnShowToast;

    @SuppressLint("ShowToast")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        // creates only one toast object..
        toast = Toast.makeText(getApplicationContext(), "", Toast.LENGTH_LONG);

        btnShowToast = (Button) findViewById(R.id.btnShowToast);

        btnShowToast.setOnClickListener(new OnClickListener() {

             @Override
             public void onClick(View v) {

                // only set text to toast object..
                toast.setText("My toast!");
                toast.show();
            }
        });
    }

    @Override
    protected void onDestroy() 
    {
        toast.cancel();
        super.onDestroy();
    }

    @Override
    protected void onStop () {
        super.onStop();
        toast.cancel();
    }
}

Надеюсь, что это вам поможет..

Ответ 4

Использовать метод отмены tost: toast.cancel();

Ответ 5

Это базовый пример с использованием метода cancel() для Toast.

Toast mytoast;
mytoast = Toast.makeText(getApplicationContext(), "Hi Ho Jorgesys! ", Toast.LENGTH_LONG);
mytoast.show();
....
....
....
if(CancelToast){
  mytoast.cancel();
}

Ответ 6

Хорошо, я тоже пытаюсь отменить тост, и, похоже, не получается вызов cancel() для вызова в Activity.onDestroy() или Activity.onStop() и т.д. После некоторого чтения API-документа и googling других, нуждающихся в помощи, чтобы Тосты были отменены, Я думаю, что до сих пор неясно, когда прекращаются действия, приостановлен, уничтожен. Мне нужен верный способ заставить свою деятельность для приостановки или остановки.

В моем конкретном случае, поскольку есть только короткие и длинные продолжительность Тосты, я решил повторить цикл в 5 раз шоу() долговременного тоста, поэтому он останется на экране в течение 15-20 секунд. Это прекрасно работает!

Но недостаток (отрицательный побочный эффект) использования объекта Toast заключается в том, что они сохраняются даже после того, как пользователь покидает ваше приложение и возвращается на домашний экран и начинает использовать другое приложение... ваше тост будет жить в течение следующих 15-20 секунд, если только вы может гарантировать, что вы можете найти какое-то место (в некотором роде) для invoke cancel(). Кроме того, вы должны верить, что Android будет почитайте свой звонок отменить()!

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

Фрагмент кода: Примечание: "тост" является общедоступной переменной INSTANCE, поэтому мы имеют только ОДИН экземпляр объекта Toast [as is рекомендованный выше, и который подтвержден комментатором работал два года назад, в Activity onStop() и OnDestroy()]

toast = Toast.makeText(ctxt, result, Toast.LENGTH_LONG);
    for (int i=0; i < 5; i++)
    {
        // Long-toasts each last about 3.5 secs
        toast.show();

        android.os.SystemClock.sleep(1500);
        toast.cancel();
        android.os.SystemClock.sleep(1500);
        toast = Toast.makeText(ctxt, result, Toast.LENGTH_LONG);
    }

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

Но для эксперимента я добавил следующие четыре строки, чтобы спать на полпути через 3,5 секунды, затем отмените его, снова спящий в течение полутора секунд, а затем снова создайте и покажите тост.

Я ожидал увидеть тост в течение примерно 1,5 секунд, а затем увидеть, как он исчезнет, и вернуться через 1,5 с и т.д.

Угадайте, что... тост никогда не появляется ВСЕ!

Хорошо, я в полном боевом режиме... чего мне не хватает, в понимание внутренних тайн о том, как класс тостов реализована и должна вести себя?

И вернемся к первому вопросу: как лучше всего получить мой Действия для перехода в приостановленное или остановленное состояние?

[Примечание: Я ПРОЧИТАЛ этот форум LOT... это здорово!!! Это моя первая публикация в середине обсуждения темы... Извините, что мой ответ становится помеченным как ОТВЕТ, а не как ВОПРОС, касающийся к этой теме темы. ]