关于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();
        }
    }

这里写图片描述
经测试,基本满足我想要实现的效果。当然,这只是一种方法。使用new Toast () 添加自己的view应也是可以实现此效果等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值