26

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

我想知道如何取消吐司。

4

8 回答 8

45

Toast.makeText返回一个Toast对象。调用cancel()此对象以取消它。

于 2010-12-09T05:17:21.230 回答
8

您可以为 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
于 2012-03-15T09:15:50.513 回答
4

我认为没有必要创建自定义吐司。

仅创建该类的单个实例Toast。我们只是使用 , 设置了 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();
    }
}

希望这对你有帮助..

于 2013-07-19T07:37:52.673 回答
0

使用 tost 的取消方法:toast.cancel();

于 2012-11-22T13:52:04.150 回答
0

这是使用 acancel()方法的基本示例Toast

Toast mytoast;
mytoast = Toast.makeText(getApplicationContext(), "Hi Ho Jorgesys! ", Toast.LENGTH_LONG);
mytoast.show();
....
....
....
if(CancelToast){
  mytoast.cancel();
}
于 2015-06-02T16:55:14.603 回答
0
Toast toast;

private void showToast(String text) {
    if (toast!=null)
        toast.cancel();
    toast = Toast.makeText(context, text, Toast.LENGTH_SHORT);
    toast.show();
}
于 2018-03-09T07:08:07.867 回答
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");
于 2021-02-22T10:55:30.547 回答
-1

好的,我也在尝试取消 Toast,并且似乎无法在 Activity.onDestroy() 或 Activity.onStop() 等中调用 cancel() 调用。在阅读了一些 API-doc 之后并在谷歌上搜索其他需要帮助取消 Toasts 的人,我想我仍然不清楚活动何时停止、暂停、销毁。我需要一种可靠的方法来强制我的活动暂停或停止。

在我的具体情况下,由于只有短时间和长时间的 Toast,我决定迭代一个循环 5 次,对长时间的 Toast 进行 show(),所以它会在屏幕上停留 15-20 秒。这很好用!

但是,使用 Toast 对象的缺点(负面影响)是,即使在用户放弃您的应用程序并返回主屏幕并开始使用其他应用程序之后,它们仍然存在……您的 toast 将继续存在15-20 秒,除非你能保证你能找到某个地方(某种方式)来调用 cancel()。此外,您必须相信 Android 会尊重您对 cancel() 的调用!

所以,为此,我一直在调整我的简单循环,尝试在循环中调用取消,并向我自己证明它会尊重取消调用,并且在视觉上表现如预期。

代码片段:注意:'toast' 是一个公共实例变量,因此我们只有一个 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 类如何实现和应该表现的内在奥秘时,我错过了什么?

并且,回到我的第一个问题:如何最好地让我的 Activity 进入暂停或停止状态?

[注意:我读了这个论坛很多......太棒了!这是我第一次在线程讨论中发帖……抱歉,我的回复被标记为答案,而不是与此线程主题相关的问题。]

于 2015-08-30T07:19:08.300 回答