1

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?

有什么问题?

4

1 回答 1

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();

}
于 2012-12-11T19:10:01.580 回答