Я разработал приложение для Android, и я столкнулся с проблемой с Toast
.
Предположим, что я показываю Toast, он отображается в окне приложения.
Когда появляется диалоговое окно, тост не исчезает мгновенно.
Я хочу знать, как я могу отменить тост.
Я разработал приложение для 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();
}
Хорошо, я тоже пытаюсь отменить тост, и, похоже, не получается вызов 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... это здорово!!! Это моя первая публикация в середине обсуждения темы... Извините, что мой ответ становится помеченным как ОТВЕТ, а не как ВОПРОС, касающийся к этой теме темы. ]