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(); }}
- This Toast was not created with Toast.makeText()的解决办法
- This Toast was not created with Toast.makeText()
- view not attached to windows manager与This Toast was not created with Toast.makeText()
- 【经验小谈】android4.2之后Toast定义的一个特点This Toast was not created with Toast.makeText()
- Toast.makeText
- Toast.makeText(this, "string string string",Toast.LENGTH_LONG).show(); 解释
- Toast.makeText(this, "string string string",Toast.LENGTH_LONG).show()解析
- Toast.makeText 操作便利
- Toast.makeText用法
- Toast.makeText用法
- Android Toast.makeText
- Toast.makeText使用方法
- Toast.makeText().show();
- Toast.makeText()的使用方法
- Toast.maketext()方法解析
- Toast.makeText 程序崩溃
- Toast.makeText 初解
- Toast.makeText(MainActivity.this, R.string.alert, Toast.LENGTH_SHORT).show(); 解释
- 源码解析ListView中的RecycleBin机制
- iframe子页面获取父页面的点击事件
- 遍历表中所有的数据(通过key值来获取的,而不是i(索引)值)
- 8、合并表记录
- Extjs中的config与constructor的异同点
- This Toast was not created with Toast.makeText()
- DBA面试题系列一
- 王心凌私密照外泄_你的秘密暴露了吗?
- 三种方式遍历的比较
- Oracle数据库归档的打开和关闭
- 添加动态链接库及静态链接库的方法总结(C++)
- 解决tomcat无法启动的一次bug
- Python_10
- 获取字符串的一部分