我一直在使用一个常见的"myToast",我myToast.cancel()在发布新的吐司之前使用它.对于Android v2.3及更早版本,这很有效.当需要发送新的吐司时,旧的吐司,如果仍然在 -屏幕,被取消(并立即消失)以替换为新的吐司.如果用户多次按下需要警报的键(以及其他条件),这可以避免堆叠一堆祝酒词.我的实际情况是出现一个吐司当按下错误的键时,如果未按下清除键,则会出现另一个键.
对于Android 4.0和4.1,myToast.cancel()在下一个toast之前发出一个杀死当前和下一个toast.当前的cancel()API确实表明它取消了当前和下一个toast(这似乎相当愚蠢).为什么要取消你想要的吐司?
任何关于取消的想法在Android版本中都能保持一致(以及它在v2.3及更早版本中的工作方式)?
我将尝试一些不道德的双吐司系统跟踪正在使用的吐司,但似乎这种痛苦解决了4.x中的这种不良行为,以便在旧的Android版本中获得完美和逻辑的功能.
好吧,我解决了它,但它并不像我希望的那样干净.我实施了双重吐司方法,它在两个吐司之间交替.首先,我们在以下之前定义活动的祝酒词OnCreate:
Toast toast0;
Toast toast1;
private static boolean lastToast0 = true;
Run Code Online (Sandbox Code Playgroud)
在OnCreate中:
toast0 = new Toast(getApplicationContext());
toast0.cancel();
toast1 = new Toast(getApplicationContext());
toast1.cancel();
Run Code Online (Sandbox Code Playgroud)
最后,当我需要同时显示吐司并取消之前的吐司时,我会使用类似的东西:
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;
}
Run Code Online (Sandbox Code Playgroud)
如果您只需要取消现有的吐司(在它超时之前),请使用:
toast0.cancel();
toast1.cancel();
Run Code Online (Sandbox Code Playgroud)
在Nexus 7(4.1),Emulator 4.0以及Android 2.2,2.3的多个设备上进行了测试.
nan*_*esh 51
而不是打电话cancel().尝试重置文本并致电show().这应该取消最后一个吐司本身
myToast.setText("wrong key")
myToast.show();
Run Code Online (Sandbox Code Playgroud)
如果你继续使用相同myToast而不是每次创建一个我猜它们不会叠加.
| 归档时间: |
|
| 查看次数: |
18420 次 |
| 最近记录: |