我一直在使用“myToast”,我使用“myToast.cancel();在发布新的Toast之前,对于Android v2.3及更高版本,这很有用。新的吐司需要发送,旧的,如果仍然在屏幕上,被取消(并立即消失),以新的吐司替代。这避免堆叠一堆吐司,如果用户多次按下一个键需要(或其他条件),我的实际情况是当按下错误的按键时出现一个烤面包,如果没有按下清除键,则出现另一个烤面包如何防止多次吐司重叠
对于Android 4.0和4.1,发出myToast.cancel()在下一个吐司杀死当前和下一个吐司之前,当前的cancel()API确实表明它取消了当前和下一个吐司(这看起来相当愚蠢)。为什么要取消你想要举办的祝酒?
关于在Android版本(以及它在v2.3及更旧版本中的工作方式)中一致地取消工作的任何想法?
我会尝试一些不雅的双烤面包系统,跟踪哪个烤面包正在使用,但看起来这样的痛苦在4.x中解决这个不良行为,以便在老版本的Android版本中得到完美和逻辑的效果。
好吧,我解决了它,但它几乎没有我所希望的那么干净。我实施了双烤面包方法,在两面烤面包之间切换。首先,我们之前的OnCreate定义敬酒的活动:
Toast toast0;
Toast toast1;
private static boolean lastToast0 = true;
在OnCreate:
toast0 = new Toast(getApplicationContext());
toast0.cancel();
toast1 = new Toast(getApplicationContext());
toast1.cancel();
最后,当我需要显示敬酒,并在同一时间取消了之前敬酒我使用类似的东西:
if (lastToast0) {
toast0.cancel();
toast1.setDuration(Toast.LENGTH_LONG);
toast1.setText("new message");
toast1.show();
lastToast0 = false;
} else {
toast1.cancel();
toast0.setDuration(Toast.LENGTH_LONG);
toast0.setText("new message");
toast0.show();
lastToast0 = true;
}
如果您只是需要取消现有吐司(超时之前)使用方法:
toast0.cancel();
toast1.cancel();
在Nexus 7(4.1),Emulator 4.0和几款采用Android 2.2,2.3的设备上测试。
你是如何取消旧吐司?在做新的之前或之后? – TheZ
你可以发布你的代码在哪里做烘烤? – Ralgha
我在新的版本之前取消了它 - 这就是为什么Android 4.x隐藏新版本是如此奇怪(但是用于吐司的API会取消某种解释将会发生)。我编辑了一个我创建的解决方案。只是不太好看。 – Frank