这个崩溃于旋转屏幕的时候, 从纵向布局切换到横向布局的时候发生:
java.lang.IllegalArgumentException: Wrong state class, expecting View State but received class android.os.Bundle instead. This usually happens when two views of different type have the same id in the same hierarchy. This view's id is id/drawLayout. Make sure other views do not use the same id.at android.view.View.onRestoreInstanceState(View.java:19858)at android.view.View.dispatchRestoreInstanceState(View.java:19830)at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3858)at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3864)at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3864)at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3864)at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3864)at android.view.View.restoreHierarchyState(View.java:19808)at com.android.internal.policy.PhoneWindow.restoreHierarchyState(PhoneWindow.java:2158)at android.app.Activity.onRestoreInstanceState(Activity.java:1563)at android.app.Activity.performRestoreInstanceState(Activity.java:1518)at android.app.Instrumentation.callActivityOnRestoreInstanceState(Instrumentation.java:1353)at android.app.ActivityThread.handleStartActivity(ActivityThread.java:3310)at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:221)at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:201)at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:173)at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)at android.os.Handler.dispatchMessage(Handler.java:107)at android.os.Looper.loop(Looper.java:214)at android.app.ActivityThread.main(ActivityThread.java:7356)at java.lang.reflect.Method.invoke(Native Method)at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
根本原因是id的冲突,纵向布局的 id/drawLayout ,和横向布局中的id/drawLayout 重名,解决方法是破而后立, 先清空layout容器中所有的布局组件,然后重新加载。
rootView?.removeAllViews()dataBinding = nulldataBinding = DataBindingUtil.inflate(LayoutInflater.from(context), layoutId(), null, false)rootView?.addView(dataBinding!!.root)dataBinding?.executePendingBindings()dataBinding!!.lifecycleOwner = this