继承DialogFragment实现Dialog闪退异常:java.lang.IllegalStateException: Fragment already added: ToastDialog

本文介绍了一种在使用DialogFragment时遇到的闪退问题及解决方案。当快速弹出和消失对话框时,由于资源管理不当,会导致应用崩溃。文章提供了一个通过重写show方法并添加remove事务来避免重复add操作的技巧。

当继承DialogFragment实现自定义样式的Dialog时,在快速弹框和消失的时候,就会出现闪退,报如下异常:
在这里插入图片描述
查看代码逻辑知道:为了不让每次使用都创建或销毁浪费资源,在创建的时候代码做的相应的判断,创建后这直接使用,才导致的问题
在这里插入图片描述
通过重写DialogFragment的show方法解决->

@Override
    public void show(FragmentManager manager, String tag) {
        try {
            //在每个add事务前增加一个remove事务,防止连续的add
            manager.beginTransaction().remove(this).commit();
            super.show(manager, tag);
        } catch (Exception e) {
            //同一实例使用不同的tag会异常,这里捕获一下
            e.printStackTrace();
        }
    }
E AndroidRuntime: FATAL EXCEPTION: main 12-16 17:49:40.720300 2641 2641 E AndroidRuntime: Process: com.google.android.googlequicksearchbox:googleapp, PID: 2641 12-16 17:49:40.720300 2641 2641 E AndroidRuntime: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState 12-16 17:49:40.720300 2641 2641 E AndroidRuntime: at dy.au(PG:12) 12-16 17:49:40.720300 2641 2641 E AndroidRuntime: at dy.ax(PG:45) 12-16 17:49:40.720300 2641 2641 E AndroidRuntime: at dy.H(PG:13) 12-16 17:49:40.720300 2641 2641 E AndroidRuntime: at bm.e(PG:7) 12-16 17:49:40.720300 2641 2641 E AndroidRuntime: at ckjc.run(PG:24) 12-16 17:49:40.720300 2641 2641 E AndroidRuntime: at eemz.onCancel(PG:5) 12-16 17:49:40.720300 2641 2641 E AndroidRuntime: at cc.onCancel(PG:13) 12-16 17:49:40.720300 2641 2641 E AndroidRuntime: at android.app.Dialog$ListenersHandler.handleMessage(Dialog.java:1497) 12-16 17:49:40.720300 2641 2641 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:107) 12-16 17:49:40.720300 2641 2641 E AndroidRuntime: at android.os.Looper.loopOnce(Looper.java:232) 12-16 17:49:40.720300 2641 2641 E AndroidRuntime: at android.os.Looper.loop(Looper.java:317) 12-16 17:49:40.720300 2641 2641 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:8758) 12-16 17:49:40.720300 2641 2641 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method) 12-16 17:49:40.720300 2641 2641 E AndroidRuntime: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:601) 12-16 17:49:40.720300 2641 2641 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:962)根据报错如何修改
最新发布
12-19
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值