Android: 视图层次结构中存在重复的id

10

我有一个问题,从市场反馈-应用程序崩溃严重,告诉我:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com....android/com....android.activities....}: java.lang.IllegalArgumentException: Wrong state class,expecting View State but received class android.widget.ProgressBar$SavedState instead。通常是由于在相同层次结构中具有相同ID的两个不同类型的视图。此视图的ID为id/0x2。确保其他视图没有使用相同的ID。

所以我知道这通常意味着它所说的 - 我有一些具有重复ID的视图。这很好,但让我担心的是,我认为重复ID视图与我集成的某些广告网络有关。我尝试通过try/catch在每个包含广告的视图上进行捕获,但未能捕获它。

所以我的下一个想法是广告视图仍然在其中扮演某种角色,但崩溃发生在其他(我自己的)视图上,其ID相同。问题是,我不知道那是什么视图和在哪里搜索它。您有任何想法0x2可能是什么视图吗? (还有很多关于该ID的报告,如0x3)?您是否遇到过与广告网络相关的类似崩溃?

真的对此感到沮丧。感激任何帮助!

谢谢, 丹

PS完整的堆栈跟踪:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.....android/com.....android.activities....}: java.lang.IllegalArgumentException: Wrong state class,expecting View State but received class android.widget.ProgressBar$SavedState instead。通常是由于在相同层次结构中具有相同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(Native Method)处:
由于java.lang.IllegalArgumentException异常:Wrong state class, expecting View State but received class android.widget.ProgressBar$SavedState instead. This usually happens when two views of different type have the same id in the same hierarchy. This view's id is id/0x2. Make sure other views do not use the same 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 more处。
1个回答

3

在从一个包含ProgressBar的fragment切换到另一个包含相同id ProgressBar的fragment时遇到了此问题。将这些id更改为不同的值就解决了问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接