如何在android中停止显示队列中的Toast消息

如何在android中停止显示队列中的Toast消息,android,toast,Android,Toast,下面的代码显示了我当前的实现,我在这里创建了一个toast对象并在onPause()中结束。在没有排队等候祝酒之前,这种方法可以正常工作 public static long **savedTimeStamp=0**; Toast showToastMessage; if(System.currentTimeMillis()/1000 - savedTimeStamp >= 60 || savedTimeStamp==0){ showToastMessage=Toast.

下面的代码显示了我当前的实现,我在这里创建了一个toast对象并在onPause()中结束。在没有排队等候祝酒之前,这种方法可以正常工作

public static long **savedTimeStamp=0**;
    Toast showToastMessage;

if(System.currentTimeMillis()/1000 - savedTimeStamp >= 60 || savedTimeStamp==0){
    showToastMessage=Toast.makeText(this.this, "Toast message", Toast.LENGTH_LONG);
    showToastMessage.show();
    savedTimeStamp=System.currentTimeMillis()/1000;
}

    @Override
             protected void onPause() {
                  super.onPause();
                  if(showToastMessage!=null)
                    {
                    showToastMessage.cancel();
                    }
    }

我发现仅在
Toast
实例上使用效果最好。第一次分配它,只需使用
setText
更新它并重新显示即可。然后cancel按预期工作,因为只有一个实例要取消

if (showToastMessage != null) {
    showToastMessage.setText("New Toast message");
    showToastMessage.show();
} else {
    showToastMessage = Toast.makeText(showString.this,"First Toast message",Toast.LENGTH_LONG);
    showToastMessage.show();
}

创建您自己的单例类,具有
处理程序
循环线程
。 制作一个类似于
showText(text,duration)
的方法,在其中创建一个runnable

在它的run方法中,使用文本创建Toast对象,然后将其发布到处理程序

Looper线程将实现代码,以查看处理程序是否为空,如果为空,将创建它


这样,每次生成toast消息时,它都会立即在UI上更新,而不是在队列中排队

最后的结论是:奎的吐司无法停止。因此,避免在que中使用toast。

创建一个类似以下的泛型类:

public class JToast {
private static Toast toast;
private static int LENGTH_LONG=Toast.LENGTH_LONG;
private static int LENGTH_SHORT=Toast.LENGTH_SHORT;

public static Toast makeText(Context context, String text, int duration) {
    if (toast != null) {
        toast.cancel();
    }
    toast = Toast.makeText(context, text, duration);
    return toast;
}
    public void show(){
        toast.show();
    }
}
你只要打个电话就可以干杯了

JToast.makeText(context, "My Toast Message", JToast.LENGTH_SHORT).show();

直到没有队列?什么意思?另外,你不应该在取消Toast之后调用super.onPause()吗?@LuxuryMode我认为在代码之后或之前调用super.onPause()并不重要。“这是一件同样的事情。”这里的LuxuryMode把这两个词作为祝酒词,等待着轮到他们。假设您有一个缩小按钮,每次超过最大限制时,都会显示一个toast Message。作为一个用户,我可能会在记录最大限制后单击5次,因此他将显示5条toast消息,这是一条糟糕的UX。@akkilis onpause()用于更好的UX,我不想在用户移动到“活动B”时显示“活动a”toast消息,因此在每次活动onapuse()上都会杀死toast。如果你知道任何其他方法,请在这篇文章中告诉我们一个解决方案:dude onpause的使用原因如下:onpause()用于更好的用户体验,我不想在用户移动到“活动B”时向用户显示“活动A”吐司消息,所以每次活动onapuse()都会杀死吐司。你仍然应该在
onpause()
中使用
取消
!我没说把它扔掉。创建时请使用上述代码,这样您就只有一个活动的
Toast
——因此请注意“然后取消按预期工作,因为只有一个实例要取消。”是的,我同意您的看法。但是有一个不同的场景:假设你有一个缩小按钮,每次超过最大限制时,都会显示一条敬酒信息。作为一个用户,我将在达到最大限制后点击5次,因此他将看到5条吐司消息,这是糟糕的用户体验。回答得很好。应该是可以接受的。相反,巴萨瓦拉伊接受了他自己的烂球。