Вопрос

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

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

Это было полезно?

Решение

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

Другие советы

Кратчайшая продолжительность, которую вы можете указать для тоста, это 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

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

Создать только один экземпляр 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();
    }
}

Надеюсь, это полезно для вас ..

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

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

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

private void showToast(String text) {
    if (toast!=null)
        toast.cancel();
    toast = Toast.makeText(context, text, Toast.LENGTH_SHORT);
    toast.show();
}

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

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

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

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

Фрагмент кода:Примечание:'toast' является общедоступной переменной ЭКЗЕМПЛЯРА, поэтому у нас есть только ОДИН экземпляр Toast-объекта [как рекомендовано выше, и что подтвердил комментатор работал два года назад в 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 секунды и т.д.

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

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

И, возвращаясь к моему первому выпуску:Как лучше всего перевести мою Активность в приостановленное или остановленное состояние?

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top