This Toast was not created with Toast.makeText() 记录一下出错的细节,自定义单例Toast

**

This Toast was not created with Toast.makeText() 记录一下出错的细节,自定义单例Toast(今天是个特殊的日子)

**
这个问题不是大问题,就是太粗心,Toast换了view就不能直接用toast.setText(message)了,要用自定义的TextView tv.setText(message)
在解决这个问题的时候还搜到了另一种情况会报这个错,下面也贴一下链接

/**
 * Created by Fang ShiXian on 2019/8/15 0021.
 */

public class ToastUtils {
    private static Context context = BaseApplication.getAppContext();
    private static Toast toast = null;
    private static TextView tv;

    //context取用Application全局的context,
    //showToast不用每次调用都传入context
    //也可以这样传入两个参数,每次调用都传context
    //    public static void showToast(Context context,String message) {
    public static void showToast(String message) {
        if (toast == null) {
            toast = new Toast(context);
            //dp2px这个方法是将dp转成px
            toast.setGravity(Gravity.CENTER, 0, ViewUtil.dp2px(100));
            toast.setDuration(Toast.LENGTH_LONG);
            //自定义toast样式
            View v = LayoutInflater.from(context).inflate(R.layout.view_toast, null);
            tv = v.findViewById(R.id.tv_toast);
            toast.setView(v);
        }
        tv.setText(message);
        toast.show();
    }

    public void showtoast(String message, int duration) {
        toast.setDuration(duration);
        showToast(message);
    }

    public void showToast(int stringId) {
        showToast(context.getString(stringId));
    }

    public void cancel() {
        if (toast != null) {
            toast.cancel();
            toast = null;
        }
    }
}

使用的话这样写

ToastUtils.showToast("请输入正确的验证码");

//两个参数的要这样用
//activity中这样用
ToastUtils.showToast(this,"请输入正确的验证码");
//fragment这样用
ToastUtils.showToast(getContext(),"请输入正确的验证码");

下面两个链接都是用Toast弹出view(图片)之后再用Toast弹出文字提示就报了错,原因都是Toast的view被替换了

https://www.jianshu.com/p/60f2b8339902

https://www.cnblogs.com/widgetbox/p/9014979.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值