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)替换之。