如何取消吐司

时间:2010-12-09 05:11:24

标签: android toast

我开发了一个Android应用程序,我遇到了Toast的问题。 假设我正在显示Toast,它将显示在应用程序窗口中。 出现对话框时,吐司不会立即消失。

我想知道如何取消祝酒词。

8 个答案:

答案 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的内在奥秘 是实现的,应该表现吗?

回到我的第一个问题:如何最好地获得我的 活动进入暂停或停止状态?

[注意:我在这个论坛上阅读了很多......这太棒了!这是我的第一篇帖子 进入线程讨论的中间......对不起,我的回复 被标记为答案,而不是作为问题相关 这个主题的主题。 ]