在方向改变类转换异常(Android版) [英] class cast exception on orientation change (Android)

查看:297
本文介绍了在方向改变类转换异常(Android版)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个由片活动举办的活动。当我改变屏幕的方向我的应用程序崩溃。

  21 02-14:01:35.825:E / AndroidRuntime(9424):了java.lang.RuntimeException:无法启动活动ComponentInfo {com.example.testapp / com。示例。 testapp.MainActivity}
java.lang.ClassCastException:android.view.AbsSavedState $ 1不能转换为android.widget.AbsListView $ SavedState
02-14 21:01:35.825:E / AndroidRuntime(9424):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2194)
02-14 21:01:35.825:E / AndroidRuntime(9424):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2229)
02-14 21:01:35.825:E / AndroidRuntime(9424):在android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3791)
02-14 21:01:35.825:E / AndroidRuntime(9424):在android.app.ActivityThread.access $ 700(ActivityThread.java:139)
02-14 21:01:35.825:E / AndroidRuntime(9424):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1265)
02-14 21:01:35.825:E / AndroidRuntime(9424):在android.os.Handler.dispatchMessage(Handler.java:99)
02-14 21:01:35.825:E / AndroidRuntime(9424):在android.os.Looper.loop(Looper.java:154)
02-14 21:01:35.825:E / AndroidRuntime(9424):在android.app.ActivityThread.main(ActivityThread.java:4945)
02-14 21:01:35.825:E / AndroidRuntime(9424):在java.lang.reflect.Method.invokeNative(本机方法)
02-14 21:01:35.825:E / AndroidRuntime(9424):在java.lang.reflect.Method.invoke(Method.java:511)
02-14 21:01:35.825:E / AndroidRuntime(9424):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:784)
02-14 21:01:35.825:E / AndroidRuntime(9424):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
02-14 21:01:35.825:E / AndroidRuntime(9424):在dalvik.system.NativeStart.main(本机方法)
02-14 21:01:35.825:E / AndroidRuntime(9424):java.lang.ClassCastException:致android.view.AbsSavedState $ 1不能被转换为android.widget.AbsListView $ SavedState
02-14 21:01:35.825:E / AndroidRuntime(9424):在android.widget.AbsListView.onRestoreInstanceState(AbsListView.java:1596)
02-14 21:01:35.825:E / AndroidRuntime(9424):在android.view.View.dispatchRestoreInstanceState(View.java:9977)
02-14 21:01:35.825:E / AndroidRuntime(9424):在android.view.ViewGroup.dispatchThawSelfOnly(ViewGroup.java:2346)
02-14 21:01:35.825:E / AndroidRuntime(9424):在android.widget.AdapterView.dispatchRestoreInstanceState(AdapterView.java:778)
02-14 21:01:35.825:E / AndroidRuntime(9424):在android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2332)
02-14 21:01:35.825:E / AndroidRuntime(9424):在android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2332)
02-14 21:01:35.825:E / AndroidRuntime(9424):在android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2332)
02-14 21:01:35.825:E / AndroidRuntime(9424):在android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2332)
02-14 21:01:35.825:E / AndroidRuntime(9424):在android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2332)
02-14 21:01:35.825:E / AndroidRuntime(9424):在android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2332)
02-14 21:01:35.825:E / AndroidRuntime(9424):在android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2332)
02-14 21:01:35.825:E / AndroidRuntime(9424):在android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2332)
02-14 21:01:35.825:E / AndroidRuntime(9424):在android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2332)
02-14 21:01:35.825:E / AndroidRuntime(9424):在android.view.View.restoreHierarchyState(View.java:9955)
02-14 21:01:35.825:E / AndroidRuntime(9424):在com.android.internal.policy.impl.PhoneWindow.restoreHierarchyState(PhoneWindow.java:1671)
02-14 21:01:35.825:E / AndroidRuntime(9424):在android.app.Activity.onRestoreInstanceState(Activity.java:939)
02-14 21:01:35.825:E / AndroidRuntime(9424):在android.app.TabActivity.onRestoreInstanceState(TabActivity.java:84)
02-14 21:01:35.825:E / AndroidRuntime(9424):在android.app.Activity.performRestoreInstanceState(Activity.java:911)
02-14 21:01:35.825:E / AndroidRuntime(9424):在android.app.Instrumentation.callActivityOnRestoreInstanceState(Instrumentation.java:1132)
   02-14 21:01:35.825:E / AndroidRuntime(9424):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2172)
  02-14 21:01:35.825:E / AndroidRuntime(9424):12 ...更多

这行清单不帮助:

 的android:configChanges =方向| keyboardHidden

和一件事其他人:在我的活动我使用的自定义视图(水平的ListView)从<一个href=\"https://github.com/dinocore1/DevsmartLib-Android\">https://github.com/dinocore1/DevsmartLib-Android

应用程序是没有这个自定义视图工作正常,但我需要使用它。


解决方案

  

不幸的是我没有足够的信誉发表图片。


XML文件没有图像和布局的XML文件。


  

我发现,如果我从第二移除第一个选项卡或Horizo​​ntalListView列表视图,我可以改变方向,没有任何问题。


这,再加上你的症状,建议您命名这两个部件用相同的的android:ID 值。这是行不通的,因为它们的保存状态,不一样的。要么使他们既是同一类,或它们命名为不同的东西。

I have an activity which is hosted by tab activity. When i change screen orientation my app crashes.

02-14 21:01:35.825: E/AndroidRuntime(9424): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.testapp/com.example.testapp.MainActivity}
java.lang.ClassCastException: android.view.AbsSavedState$1 cannot be cast to android.widget.AbsListView$SavedState
02-14 21:01:35.825: E/AndroidRuntime(9424):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2194)
02-14 21:01:35.825: E/AndroidRuntime(9424):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2229)
02-14 21:01:35.825: E/AndroidRuntime(9424):     at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3791)
02-14 21:01:35.825: E/AndroidRuntime(9424):     at android.app.ActivityThread.access$700(ActivityThread.java:139)
02-14 21:01:35.825: E/AndroidRuntime(9424):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1265)
02-14 21:01:35.825: E/AndroidRuntime(9424):     at android.os.Handler.dispatchMessage(Handler.java:99)
02-14 21:01:35.825: E/AndroidRuntime(9424):     at android.os.Looper.loop(Looper.java:154)
02-14 21:01:35.825: E/AndroidRuntime(9424):     at android.app.ActivityThread.main(ActivityThread.java:4945)
02-14 21:01:35.825: E/AndroidRuntime(9424):     at java.lang.reflect.Method.invokeNative(Native Method)
02-14 21:01:35.825: E/AndroidRuntime(9424):     at java.lang.reflect.Method.invoke(Method.java:511)
02-14 21:01:35.825: E/AndroidRuntime(9424):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
02-14 21:01:35.825: E/AndroidRuntime(9424):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
02-14 21:01:35.825: E/AndroidRuntime(9424):     at dalvik.system.NativeStart.main(Native Method)
02-14 21:01:35.825: E/AndroidRuntime(9424): Caused by: java.lang.ClassCastException: android.view.AbsSavedState$1 cannot be cast to android.widget.AbsListView$SavedState
02-14 21:01:35.825: E/AndroidRuntime(9424):     at android.widget.AbsListView.onRestoreInstanceState(AbsListView.java:1596)
02-14 21:01:35.825: E/AndroidRuntime(9424):     at android.view.View.dispatchRestoreInstanceState(View.java:9977)
02-14 21:01:35.825: E/AndroidRuntime(9424):     at android.view.ViewGroup.dispatchThawSelfOnly(ViewGroup.java:2346)
02-14 21:01:35.825: E/AndroidRuntime(9424):     at android.widget.AdapterView.dispatchRestoreInstanceState(AdapterView.java:778)
02-14 21:01:35.825: E/AndroidRuntime(9424):     at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2332)
02-14 21:01:35.825: E/AndroidRuntime(9424):     at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2332)
02-14 21:01:35.825: E/AndroidRuntime(9424):     at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2332)
02-14 21:01:35.825: E/AndroidRuntime(9424):     at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2332)
02-14 21:01:35.825: E/AndroidRuntime(9424):     at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2332)
02-14 21:01:35.825: E/AndroidRuntime(9424):     at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2332)
02-14 21:01:35.825: E/AndroidRuntime(9424):     at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2332)
02-14 21:01:35.825: E/AndroidRuntime(9424):     at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2332)
02-14 21:01:35.825: E/AndroidRuntime(9424):     at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2332)
02-14 21:01:35.825: E/AndroidRuntime(9424):     at android.view.View.restoreHierarchyState(View.java:9955)
02-14 21:01:35.825: E/AndroidRuntime(9424):     at com.android.internal.policy.impl.PhoneWindow.restoreHierarchyState(PhoneWindow.java:1671)
02-14 21:01:35.825: E/AndroidRuntime(9424):     at android.app.Activity.onRestoreInstanceState(Activity.java:939)
02-14 21:01:35.825: E/AndroidRuntime(9424):     at android.app.TabActivity.onRestoreInstanceState(TabActivity.java:84)
02-14 21:01:35.825: E/AndroidRuntime(9424):     at android.app.Activity.performRestoreInstanceState(Activity.java:911)
02-14 21:01:35.825: E/AndroidRuntime(9424):     at android.app.Instrumentation.callActivityOnRestoreInstanceState(Instrumentation.java:1132)
   02-14 21:01:35.825: E/AndroidRuntime(9424):  at    android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2172)
  02-14 21:01:35.825: E/AndroidRuntime(9424):   ... 12 more

This line in manifest doesn't help:

android:configChanges="orientation|keyboardHidden"

And one thing else: in my activity i use custom view (horizontal ListView) from https://github.com/dinocore1/DevsmartLib-Android

The app is working fine without this custom view, but i need to use it.

解决方案

Unfortunately i don't have enough reputation to post images.

XML files are not images, and layouts are XML files.

I found that if i remove listview from first tab or HorizontalListView from the second, i can change orientation without any problem

That, plus your symptoms, suggests that you named those two widgets with the same android:id value. That will not work, as their saved states are not the same. Either make them be both the same class, or name them something different.

这篇关于在方向改变类转换异常(Android版)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆