关于Toast提示消失问题

    当在一个页面弹出多个Toast,会发现它们会排成一个队列,一个一个显示,当退出或切换这个页面,
    这些toast仍会挨个显示完。有时,我们并不需要它们再显示。这就用到了Toast的cancel() 方法。
    但是如果仍用之前的习惯写法 Toast.makeText(this, "", Toast.LENGTH_SHORT).show();
    无法调用cancel().所以希望此类中就只有一个Toast对象, 当页面消失时,调用toast.cancel();
    而此toast对象如果用new Toast (), 再用toast.setText(msg); 发现会出现 "This Toast was not created with Toast.makeText()" 此类问题。
    看源码知道,此方法只能改变text值,不能在第一次使用。创建toast仍需makeText() 方法。所以可以先使用makeText()
    创建一个toast, 再使用setText(msg) 改变之后要提示的内容,这样也可以保证只有一个toast对象,在cancel() 时,
    可以使其消失。

    代码如下:
    protected void toast(String msg) {
        if (toast == null) {
            toast = toast.makeText(this, "", Toast.LENGTH_SHORT);
        }
        toast.setText(msg);
        toast.setDuration(Toast.LENGTH_SHORT);
        toast.show();
        Log.i("Toast", "toast" + "---------------" + toast.toString());
    }
    protected void cancelToast() {
        if (toast != null) {
            Log.i("Toast", "cancelToast" + "---------------" + toast.toString());
            toast.cancel();
        }
    }

关于Toast提示消失问题_第1张图片
经测试,基本满足我想要实现的效果。当然,这只是一种方法。使用new Toast () 添加自己的view应也是可以实现此效果等。

你可能感兴趣的:(Android,toast)