【问题标题】:Android: duplicated ids in view hierarchyAndroid:视图层次结构中的重复 ID
【发布时间】:2012-04-17 12:39:39
【问题描述】:

我有一个问题,来自市场的报告 - 应用程序严重崩溃,告诉我:

java.lang.RuntimeException: 无法启动活动 ComponentInfo{com....android/com....android.activities....}: java.lang.IllegalArgumentException: 错误的状态类,期待视图状态但是改为接收类 android.widget.ProgressBar$SavedState。当不同类型的两个视图在同一层次结构中具有相同的 id 时,通常会发生这种情况。这个视图的 id 是 id/0x2。确保其他视图不使用相同的 id。

所以我知道它通常意味着它所说的 - 我在某处有重复 id 的视图。这很好,但让我担心的是,我认为重复的 id 视图来自我集成的一些 ad 网络。我尝试在视图上使用 try/catch 来控制崩溃,该视图包含每个广告,但未能捕捉到它。

所以我的下一个想法是广告视图仍然在其中发挥作用,但是崩溃发生在具有相同 id 的另一个(我自己的)视图上。问题是,我不知道那个视图是什么以及在哪里搜索它。你有什么想法可以是 id 0x2 的视图吗? (也是 0x3 - 也有很多关于该 ID 的报告)?您是否偶然发现了与广告网络相关的类似崩溃?

对此感到非常沮丧。任何帮助表示赞赏!

谢谢, 丹

PS 完整的堆栈跟踪:

java.lang.RuntimeException: 无法启动活动 ComponentInfo{com.....android/com.....android.activities....}: java.lang.IllegalArgumentException: 错误的状态类,期待 View状态,但收到了 android.widget.ProgressBar$SavedState 类。当不同类型的两个视图在同一层次结构中具有相同的 id 时,通常会发生这种情况。这个视图的 id 是 id/0x2。确保其他视图不使用相同的 ID。 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667) 在 android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:2836) 在 android.app.ActivityThread.access$1600(ActivityThread.java:117) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:939) 在 android.os.Handler.dispatchMessage(Handler.java:99) 在 android.os.Looper.loop(Looper.java:130) 在 android.app.ActivityThread.main(ActivityThread.java:3691) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:507) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:907) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:665) 在 dalvik.system.NativeStart.main(本机方法) 原因:java.lang.IllegalArgumentException:错误的状态类,期望查看状态,但收到了类 android.widget.ProgressBar$SavedState。当不同类型的两个视图在同一层次结构中具有相同的 id 时,通常会发生这种情况。这个视图的 id 是 id/0x2。确保其他视图不使用相同的 ID。 在 android.view.View.onRestoreInstanceState(View.java:6355) 在 android.view.View.dispatchRestoreInstanceState(View.java:6331) 在 android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:1211) 在 android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:1215) 在 android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:1215) 在 android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:1215) 在 android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:1215) 在 android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:1215) 在 android.view.View.restoreHierarchyState(View.java:6310) 在 com.android.internal.policy.impl.PhoneWindow.restoreHierarchyState(PhoneWindow.java:1537) 在 android.app.Activity.onRestoreInstanceState(Activity.java:850) 在 android.app.Activity.performRestoreInstanceState(Activity.java:822) 在 android.app.Instrumentation.callActivityOnRestoreInstanceState(Instrumentation.java:1096) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1629) ... 12 更多

【问题讨论】:

    标签: android crash ads


    【解决方案1】:

    在从一个片段切换到另一个片段时遇到此问题,该片段包含与进度条相同的 id。将 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
      • 1970-01-01
      相关资源
      最近更新 更多