android.view.AbsSavedState $ 1无法转换为android.widget.CompoundButton $ SavedState

时间:2018-10-01 13:04:42

标签: android fragmentmanager

我在Crashlytics上看到以下错误,发生率很高:

Caused by java.lang.ClassCastException: android.view.AbsSavedState$1 cannot be cast to android.widget.CompoundButton$SavedState
       at android.widget.CompoundButton.onRestoreInstanceState(CompoundButton.java)
       at android.view.View.dispatchRestoreInstanceState(View.java)
       at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java)
       at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java)
       at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java)
       at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java)
       at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java)
       at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java)
       at android.view.View.restoreHierarchyState(View.java)
       at android.support.v4.app.Fragment.restoreViewState(Fragment.java:494)
       at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1486)
       at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1784)
       at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1852)
       at android.support.v4.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3269)
       at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:3229)
       at android.support.v4.app.Fragment.performActivityCreated(Fragment.java:2466)
       at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1483)
       at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1784)
       at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1852)
       at android.support.v4.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3269)
       at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:3229)
       at android.support.v4.app.FragmentController.dispatchActivityCreated(FragmentController.java:201)
       at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:620)
       at android.support.v7.app.AppCompatActivity.onStart(AppCompatActivity.java:178)
       at android.app.Instrumentation.callActivityOnStart(Instrumentation.java)
       at android.app.Activity.performStart(Activity.java)
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java)
       at android.app.ActivityThread.access$900(ActivityThread.java)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java)
       at android.os.Handler.dispatchMessage(Handler.java)
       at android.os.Looper.loop(Looper.java)
       at android.app.ActivityThread.main(ActivityThread.java)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java)

但是,由于在平台级别引发了异常,因此此堆栈跟踪对我的代码库没有任何帮助。

从我读到的内容来看,这可能与重复的ID有关,但是我在代码中找不到任何有关如何调试此ID的想法?

我还尝试在开发人员选项上启用“不保留活动”以强制实例还原,但是我无法手动重现崩溃。

4 个答案:

答案 0 :(得分:2)

在不查看代码和确切的活动/片段类的情况下,很难找到确切的问题,但是可能有以下原因可以帮助您进行更多调试。

  1. 在转换时,您可能具有重复的ID名称或“查看哪些匹配项并造成内存泄漏”。

  2. 可能CompoundButton的导入错误,可能是因为您使用的是自定义视图或版本影响。

答案 1 :(得分:0)

这可能是由与包含布局的名称相同的resId视图引起的。(主要原因)。

它也可能是由重复resId的视图引起的,但这不太可能是原因。

查看建议的所有片段XML(很难分辨是哪个原因引起的)。

但是Edit> Find> Find in Path ...使查找事件变得容易;

在另一个布局后面搜索一个布局名称;然后搜索视图的resId

答案 2 :(得分:0)

好吧,事实证明我正在使用新的Chip组件(扩展CompoundButton),并且有一组带有没有ID的芯片。

这会导致该应用在旧版手机(Android 6)上崩溃,因为同一ID被分配给我只能猜测的多个芯片。

我卸下了该芯片(无论如何也没有必要),它也不再崩溃。

答案 3 :(得分:0)

就我而言,我从所有包含的布局中删除了滚动视图。