Вопрос
Я разработал приложение для 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 это здорово!!!Это мое первое сообщение в середине обсуждения темы...Извините, что мой ответ помечен как ОТВЕТ, а не как ВОПРОС, относящийся к теме этой темы.]