**
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(),"请输入正确的验证码");