一个Toast报错问题 java.lang.IllegalStateException: View has already been added to the window manager.

1.进入应用,然后退出当前Activity,再进入应用,总是会报错。


10-28 17:54:20.104 29138-29138/com.letv.tv D/AndroidRuntime: Shutting down VM
10-28 17:54:20.106 29138-29138/com.letv.tv E/AndroidRuntime: FATAL EXCEPTION: main
                                                             Process: com.letv.tv, PID: 29138
                                                             java.lang.IllegalStateException: View com.letv.core.scaleview.ScaleRelativeLayout{ff1169b V.E...... ......I. 0,0-0,0} has already been added to the window manager.
                                                                 at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:281)
                                                                 at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:85)
                                                                 at android.widget.Toast$TN.handleShow(Toast.java:430)
                                                                 at android.widget.Toast$TN$1.run(Toast.java:336)
                                                                 at android.os.Handler.handleCallback(Handler.java:739)
                                                                 at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                 at android.os.Looper.loop(Looper.java:148)
                                                                 at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                                 at java.lang.reflect.Method.invoke(Native Method)
                                                                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:731)
                                                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:621)



2.查了半天也找不到原因,后来发现问题出在自定义的Toast。写了一个单例的Toast类,但是重新进入时,单例类还是之前的那个,view没有销毁;但是又重新被添加。所以才会报错。

private static volatile LeChildToast sInstance;

public LeChildToast(Context context) {
    super(context);
    View view = LayoutInflater.from(context).inflate(R.layout.lechild_toast, null);
    // 动态设置背景
    int paddingLeft = view.getPaddingLeft();
    int paddingTop = view.getPaddingTop();
    int paddingRight = view.getPaddingRight();
    int paddingBottom = view.getPaddingBottom();
    view.setBackgroundDrawable(SkinManager.getDrawable(R.drawable.lechild_toast_bg));
    view.setPadding(paddingLeft, paddingTop, paddingRight, paddingBottom);
    // 动态设置图标
    View icon = view.findViewById(R.id.icon);
    icon.setBackgroundDrawable(SkinManager.getDrawable(R.attr.lechild_drawable_lechild_toast_icon));
    this.mTextView = (TextView) view.findViewById(R.id.msg);
    this.setView(view);
}

public static void reset() {
    sInstance = null;
}

3.解决方案,在Activity的基类里,onDestory()的时候调用reset(),保证view可以被销毁。


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值