我开发了一个Android应用程序,我遇到了Toast
的问题。
假设我正在显示Toast,它将显示在应用程序窗口中。
出现对话框时,吐司不会立即消失。
我想知道如何取消祝酒词。
答案 0 :(得分:43)
Toast.makeText
会返回Toast
个对象。在此对象上调用cancel()
取消它。
答案 1 :(得分:6)
您可以为toast指定的最短持续时间为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
答案 2 :(得分:4)
我认为没有必要创建自定义吐司。
仅创建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();
}
}
希望这对你有帮助..
答案 3 :(得分:0)
使用tost的取消方法:toast.cancel();
答案 4 :(得分:0)
这是使用cancel()
的{{1}}方法的基本示例。
Toast
答案 5 :(得分:0)
Toast toast;
private void showToast(String text) {
if (toast!=null)
toast.cancel();
toast = Toast.makeText(context, text, Toast.LENGTH_SHORT);
toast.show();
}
答案 6 :(得分:0)
首先你必须创建 toast 对象
private Toast toast;
然后创建将消息显示为 Toast 的方法
private void showToast(String text) {
if (toast != null) toast.cancel(); // cancel previous toast
toast = Toast.makeText(context, text, Toast.LENGTH_SHORT);
toast.show();
}
现在当你必须取消吐司时调用下面的方法
if (toast != null) {
toast.cancel();
}
当你必须显示 Toast 时调用下面的方法
showToast("Your Message");
答案 7 :(得分:-1)
好吧,我也试图取消Toast,但似乎无法获得 在Activity.onDestroy()中调用的cancel()调用 或者Activity.onStop()等。经过一些API-doc阅读和 谷歌搜索其他需要帮助获取Toasts取消, 我以为我还不清楚活动何时停止, 停了下来,被摧毁了。我需要一种可靠的方法来强迫我的活动 暂停或停止。
在我的具体案例中,因为只有短期和长期 持续时间Toasts,我决定迭代循环5次 一个长时间吐司的秀(),所以它会留在屏幕上 持续15-20秒。这很好用!
但是,使用Toast对象的缺点(负面副作用) 是因为用户放弃你的应用程序后它们仍然存在 回到主屏幕并开始使用其他应用程序...你的 除非你,否则吐司将在接下来的15-20秒内活着 可以保证你可以找到一些地方(某种方式) 调用cancel()。此外,你必须相信Android会 尊重你的取消取消()!
所以,为此,我一直在调整我的简单循环,试图 调用在循环中取消,并向自己证明它会 兑现取消电话,视觉上表现如预期。
代码段: 注意:'吐司'是一个公共的INSTANCE变量,所以我们 只有Toast-object的一个实例[原样 以上推荐,评论者确认 两年前,在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秒显示,然后取消它,再次入睡 一秒钟,然后重新创建并再次展示Toast。
我希望看到烤面包约1.5秒,然后看到它消失, 再过1.5秒等等。
猜猜是什么......吐司永远不会出现!
好的,我完全是笨拙的模式......我错过了什么 了解Toast-class的内在奥秘 是实现的,应该表现吗?
回到我的第一个问题:如何最好地获得我的 活动进入暂停或停止状态?
[注意:我在这个论坛上阅读了很多......这太棒了!这是我的第一篇帖子 进入线程讨论的中间......对不起,我的回复 被标记为答案,而不是作为问题相关 这个主题的主题。 ]