zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    python中RabbitMQ的使用(远程过程调用RPC)
    python中RabbitMQ的使用(交换机,广播形式)
    python中RabbitMQ的使用(路由键模糊匹配)
    python中sys.argv[]的使用
    python中RabbitMQ的使用(路由键)
    操作远程RabbitMQ
    python中RabbitMQ的使用(工作队列)
    python中RabbitMQ的使用(安装和简单教程)
    python中eval()和json.dumps的使用
    python使用MySQLdb模块连接MySQL
  • 原文地址:https://www.cnblogs.com/widgetbox/p/9014979.html
Copyright © 2011-2022 走看看