Toast问题记录:This Toast was not created with Toast.makeText()

最近使用自己封装的Toast时,遇到一个问题

java.lang.RuntimeException: This Toast was not created with Toast.makeText()

刚开始追踪原因以为Toast初始化是空的,按照这个思路去改,发现还是出现这个崩溃。so,查资料。

因为产品有吐司图片的需求,所以封装了以下两个方法:文字吐司+图片吐司。

 1 public class ToastUtils {
 2 
 3     private static Toast mToast;
 4 
 5     public static void showToast(Context context, String msg){
 6         if(null == mToast){
 7             mToast = new Toast(context);
 8         }
 9         mToast.setDuration(Toast.LENGTH_SHORT);
10         mToast.setText(msg);
11         mToast.show();
12     }
13 
14     public static void showToastWithImg(Context context, View view){
15         if(null == mToast){
16             mToast = new Toast(context);
17         }
18         mToast.setDuration(Toast.LENGTH_SHORT);
19         mToast.setView(view);
20         mToast.show();
21     }
22 }

乍一看,貌似没啥问题。但是如果先调用showToastWithImg()之后,再调用showToast(),这个崩溃必现。

那是因为:

1、这是因为先执行showToastWithImg()方法时,mToast.setView(view);把Toast中的contentView替换为自定义的view了;

2、而再执行showToast()方法之后,mToast对象不为空,复用了前面的对象;

3、mToast.setText(msg):这句代码是给指定的TextView设置msg文本,而这个指定的TextView在默认的contentView中,但是这个contentView已经修改为自定义的view了,里面已经没有指定的那个TextView了。

所以解决方案是设置两个不同的Toast对象

private static Toast mTextToast = null;
private static Toast mViewToast = null;

文字和图片的吐司分开去复用,这样就解决啦!

 By LiYing

转载于:https://www.cnblogs.com/widgetbox/p/9014979.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值