This Toast was not created with Toast.makeText()

来源:互联网 发布:复旦大学软件工程学院 编辑:程序博客网 时间:2024/06/04 18:28

这里先抛出错误代码:

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

大家都用过Toast,不过每次调用都使用以下方式,也挺麻烦的:

Toast.makeText(context,msg,Toast.LENGTH_SHORT).show();

这个时候相信会想到封装一个工具类,通过一个方法直接调用,例如下面的代码:

public class ToastUtils {    private static Toast mToast;    public static void showToast(Context context, String msg){        if(null == mToast){            mToast = new Toast(context);        }        mToast.setDuration(Toast.LENGTH_SHORT);        mToast.setText(msg);        mToast.show();    }    public static void showToast(Context context, View view){        if(null == mToast){            mToast = new Toast(context);        }        mToast.setDuration(Toast.LENGTH_SHORT);        mToast.setView(view);        mToast.show();    }}

咋眼一看好像没什么问题,mToast对象如果为空就创建,如果不为空就复用。其实不然,稍有不慎就会抛出以上异常。This Toast was not created with Toast.makeText()这里解释下为什么会出现这个异常,当执行showToast(Context context, String msg)方法之后再执行showToast(Context context, View view)方法,这个时候是没有问题的。

反过来执行则会出问题

问题原因:

1.这个是因为先执行showToast(Context context, View view)方法之后;

2.mToast.setView(view);把Toast中的contentView替换为自定义的view了;

3.而再执行showToast(Context context, String msg)方法之后,mToast对象不为空,复用了前面的对象;

4.mToast.setText(msg);这句代码里面的实现是给指定的TextView设置msg文本,而这个指定的TextView在默认的contentView中,这个时候contentView已经修改为自定义的view了,里面已经没有指定的那个TextView了呢。

解决方法:

知道问题原因,再去处理就好办多了,mToast对象分开去复用,将setText的方法归到一个类用同一个对象,setView的方法归到另一个对象去处理。

public class ToastUtils {    private static Toast mTextToast;    private static Toast mViewToast;    public static void showToast(Context context, String msg){        if(null == mTextToast){            mTextToast = new Toast(context);        }        mTextToast.setDuration(Toast.LENGTH_SHORT);        mTextToast.setText(msg);        mTextToast.show();    }    public static void showToast(Context context, View view){        if(null == mViewToast){            mViewToast = new Toast(context);        }        mViewToast.setDuration(Toast.LENGTH_SHORT);        mViewToast.setView(view);        mViewToast.show();    }}
原创粉丝点击