【问题标题】:java.lang.ClassCastException: android.view.AbsSavedState$1 cannot be cast to android.support.v7.widget.Toolbar$SavedStatejava.lang.ClassCastException: android.view.AbsSavedState$1 不能转换为 android.support.v7.widget.Toolbar$SavedState
【发布时间】:2015-05-11 17:46:45
【问题描述】:

我的应用从后台转到前台时经常崩溃。场景:假设我正在玩任何游戏并且我的应用程序在最近列表中,并且在播放后,如果我选择应用程序,它将崩溃并显示错误。我的应用程序中没有工具栏,只有我使用的操作栏。

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.fcords.android/com.fcords.android.Home.HomeScreen.HomePage_New}: java.lang.ClassCastException: android.view.AbsSavedState$1 cannot be cast to android.support.v7.widget.Toolbar$SavedState
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2314)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2388)
        at android.app.ActivityThread.access$800(ActivityThread.java:148)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1292)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5312)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696)
 Caused by: java.lang.ClassCastException: android.view.AbsSavedState$1 cannot be cast to android.support.v7.widget.Toolbar$SavedState
        at android.support.v7.widget.Toolbar.onRestoreInstanceState(Toolbar.java:1048)
        at android.view.View.dispatchRestoreInstanceState(View.java:13639)
        at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2889)
        at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2895)
        at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2895)
        at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2895)
        at android.view.View.restoreHierarchyState(View.java:13617)
        at com.android.internal.policy.impl.PhoneWindow.restoreHierarchyState(PhoneWindow.java:1982)
        at android.app.Activity.onRestoreInstanceState(Activity.java:1032)
        at android.app.Activity.performRestoreInstanceState(Activity.java:987)
        at android.app.Instrumentation.callActivityOnRestoreInstanceState(Instrumentation.java:1184)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2287)

           

有人遇到这个问题吗?在此先感谢。

【问题讨论】:

  • 你能添加一些你的代码吗?
  • @SaiKiran 关于 Toolbar$SavedState 的任何想法?我没有在我的应用程序中使用 Toolbar..only actionbar,我使用了。

标签: android memory-management android-actionbar


【解决方案1】:

我的问题已解决:

我的问题是:

1:我在 xml 中有一个与布局同名的 id。

ie:在我的情况下,我有一个名为“action_bar.xml”的自定义操作栏布局,另一个布局中的 id 为“+id/action_bar”。所以当应用程序不在内存中时,这会导致问题,而重新创建该页面。

注意:不要在应用中多次使用相同的 ID/LAYOUT 名称。

【讨论】:

  • 在我的例子中,我使用 将多个下一个布局包含到一个容器布局中。这些嵌套布局的视图具有相同的 id 。使嵌套的 id 唯一后,问题就消失了。
【解决方案2】:

这种情况也可能发生:

如果您在另一个具有 AttributeSet 参数的父视图的构造函数中以编程方式创建自定义视图:

   public ToggleButtonDescriptive(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        this.toggleButton = new SquareToggleButton(ctx, attributeSet);
    }

不要将 AttributeSet 传递给该子视图:

toggleButton = new SquareToggleButton(ctx, attributeSet);

由于传递 AttributeSet 会导致子视图具有与父视图相同的 id,因此 Android 会尝试将父视图的 SavedState 恢复为该子视图,反之亦然。而是完全省略 AttributeSet 参数,如下所示:

toggleButton = new SquareToggleButton(ctx);

【讨论】:

【解决方案3】:

在我的情况下,我的屏幕中有 ChipGroup 和没有 id 的芯片的布局。然后,如果我从其他人返回此屏幕 - 我收到此错误“java.lang.ClassCastException:android.view.AbsSavedState$1 无法转换为 android.widget.CompoundButton$SavedState”。 所以只需将 id 添加到芯片中,一切正常。

【讨论】:

    【解决方案4】:

    在我的例子中,我创建了几个自定义组件,例如 drop drow、Textinput 等。它们都具有与相同标题、强制符号相同的结构。所有的 id 都是相同的,目前这不是一个大问题,因为它们处于不同的布局中。

    但后来恰好出现这个错误

    java.lang.ClassCastException: android.view.View$BaseSavedState cannot be cast to androidx.appcompat.widget.AppCompatSpinner$SavedState
    

    然后我将所有自定义组件内部组件的 ID 更改为不同的。然后问题就解决了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-03
      相关资源
      最近更新 更多