我在模块中有一系列Toast
条消息,每次用户按下按钮时都会显示Toast
。为了减少排队时间,我只是将值传递给方法,这样它就不会结束直到完成预定的持续时间。
像这样:
dt("on button press");
private void dt(final String message) {
TextView text = (TextView) layout.findViewById(R.id.totext);
toast = new Toast(getApplicationContext());
toast.setGravity(Gravity.BOTTOM, 0, 0);
toast.setDuration(Toast.LENGTH_SHORT);
toast.setView(layout);
toast.cancel();
text.setText(message);
text.setTextSize(16);
toast.show();
}
我的问题是这段代码在Gingerbread和Android的较低版本上完美运行。 但它不适用于ICS和Jelly Bean吗?
有什么问题?
答案 0 :(得分:4)
问题出在你正在调用的Toast.cancel()
上。我相信,在Honeycomb之前,只有cancel()
隐藏它,如果它已经显示的话。但是,在以后的实现中,它具有以下行为(重点是我的):
关闭视图,如果它显示,或如果它还没有显示则显示。
您需要将cancel()
的电话转移到new Toast()
之前(当然,首先检查它是null
):
private void dt(final String message) {
TextView text = (TextView) layout.findViewById(R.id.totext);
if (toast != null) {
toast.cancel(); // Move me here!
}
toast = new Toast(getApplicationContext());
toast.setGravity(Gravity.BOTTOM, 0, 0);
toast.setDuration(Toast.LENGTH_SHORT);
toast.setView(layout);
text.setText(message);
text.setTextSize(16);
toast.show();
}