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

我想知道如何取消吐司。

有帮助吗?

解决方案

Toast.makeText 返回a 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() 方法IN 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();
}

好的,我也试图取消吐司,似乎无法接听CANCEL()调用以在activity.ondestroy()或activity.onstop()等中调用。谷歌搜索需要帮助取消吐司的其他人,我认为我仍然不清楚何时停止,暂停,摧毁活动。我需要一种肯定的方式来迫使我的活动暂停或停止。

在我的具体情况下,由于只有短持续时间吐司,因此我决定迭代一个循环5次进行长期吐司的表演,因此它将在屏幕上停留15-20秒。效果很好!

但是,使用吐司对象的缺点(负面副作用)是,即使用户放弃了您的应用程序并返回到Home-Screen并开始使用其他应用程序... 15-20秒,除非您可以保证可以找到某个位置(某种方式)以调用CANCAL()。另外,您必须相信Android会兑现您的CANCEL()电话!

因此,为此,我一直在调整我的简单循环,试图在循环中取消取消,并向自己证明它将尊重取消电话,并在视觉上表现出预期的行为。

代码段:注意:'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秒内恢复了烤面包,等等。

猜猜什么...烤面包根本不会出现!

好的,我完全是喃喃自语模式...在理解如何实现吐司级和应该表现的内部疾病时,我缺少什么?

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

注意:我读了很多...太好了!!!这是我第一次发布到线程讨论中的中间...对不起,我的答复被标记为答案,而不是作为与此线程主题有关的问题。这是给予的

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top