Intereting Posts

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

Я разработал приложение для Android, и перед вами стоит проблема с Toast . Предположим, что я показываю 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 и не могу получить вызов cancel () для вызова в Activity.onDestroy () или Activity.onStop () и т. Д. После некоторого чтения API-документа И googling других, нуждающихся в помощи, чтобы Тосты были отменены, я думаю, что до сих пор неясно, когда действия прекращаются, приостанавливаются, уничтожаются. Мне нужен верный способ заставить мою деятельность приостановить или остановить.

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

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

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

Фрагмент кода: Примечание: «тост» является общедоступной переменной INSTANCE, поэтому у нас есть только один экземпляр объекта 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 с и т. Д.

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

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

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

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