当前位置: 首页 > 工具软件 > Lang switcher > 使用案例 >

Butterknife出错java.lang.IllegalStateException: Fragment already added

吴德辉
2023-12-01

  Andorid完成初始加载页面后闪退,出现下面的异常信息。

java.lang.IllegalStateException: Fragment already added: xxxFragment{a26fb6d} (bfc99ad9-04b8-468b-aa9d-eebf146ca002) id=0x7f09016f android:switcher:2131296623:0}
        at androidx.fragment.app.FragmentStore.addFragment(FragmentStore.java:67)
        at androidx.fragment.app.FragmentManager.addFragment(FragmentManager.java:1563)
        at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:405)
        at androidx.fragment.app.FragmentManager.executeOps(FragmentManager.java:2167)
        at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1990)
        at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1945)
        at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1847)
        at androidx.fragment.app.FragmentManager$4.run(FragmentManager.java:413)
        at android.os.Handler.handleCallback(Handler.java:907)
        at android.os.Handler.dispatchMessage(Handler.java:105)
        at android.os.Looper.loop(Looper.java:216)
        at android.app.ActivityThread.main(ActivityThread.java:7625)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987)

于是理所当然的检查xxxFragment,后来也查了网上的资料,但并没有发现问题..

后来检查生命后期调试,发现baseFragment的@OnClick先于bind执行,当bind = ButterKnife.bind(this,rootView)时,绑定的Fragment已存在。

解决方法

1. 需要先ButterKnife.bind,再执行@OnClick所要加载的控件。

2. 还有一种是@BindView导致的,使用xxxView.findViewById(R.id.xx)替换之。

 类似资料: