java.lang.ClassCastException不能转换为android.app.Fragment转换为、ClassCastException、lang、java

2023-09-04 03:32:43 作者:是梦终会醒、是命终会亡

我有有方法,实例化ApplicationBar MainActivity类,其他所有活动都继承了这种形式 MainActivity 这样他们就可以用这个方法。

不过,我也有一类MapHolder它必须从 FragmentActivity 扩展在XML它使用了一个片段显示地图。问题是,如果我从 FragmentActivity 扩展它,我不能显示ApplicationBar选项卡,如果我从MainActivity扩展它比我不能显示地图,它给这个错误:

LogCat中输出:

  09-29 17:52:10.107:E / GooglePlayServicesUtil(3788):谷歌Play业务是无效的。无法恢复。
09-29 17:52:43.536:E / AndroidRuntime(3832):致命异常:主要
09-29 17:52:43.536:E / AndroidRuntime(3832):java.lang.RuntimeException的:无法启动的活动ComponentInfo {com.mydomain.myproj / com.mydomain.myproj.MapHolder}:android.view.InflateException:二进制XML文件行#2:错误充气类片段
09-29 17:52:43.536:E / AndroidRuntime(3832):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
09-29 17:52:43.536:E / AndroidRuntime(3832):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
09-29 17:52:43.536:E / AndroidRuntime(3832):在android.app.ActivityThread.access $ 600(ActivityThread.java:141)
09-29 17:52:43.536:E / AndroidRuntime(3832):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1256)
09-29 17:52:43.536:E / AndroidRuntime(3832):在android.os.Handler.dispatchMessage(Handler.java:99)
09-29 17:52:43.536:E / AndroidRuntime(3832):在android.os.Looper.loop(Looper.java:137)
09-29 17:52:43.536:E / AndroidRuntime(3832):在android.app.ActivityThread.main(ActivityThread.java:5103)
09-29 17:52:43.536:E / AndroidRuntime(3832):在java.lang.reflect.Method.invokeNative(本机方法)
09-29 17:52:43.536:E / AndroidRuntime(3832):在java.lang.reflect.Method.invoke(Method.java:525)
09-29 17:52:43.536:E / AndroidRuntime(3832):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:737)
09-29 17:52:43.536:E / AndroidRuntime(3832):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
09-29 17:52:43.536:E / AndroidRuntime(3832):在dalvik.system.NativeStart.main(本机方法)
09-29 17:52:43.536:E / AndroidRuntime(3832):android.view.InflateException:二进制XML文件中的行#2:错误充气类片段产生的原因
09-29 17:52:43.536:E / AndroidRuntime(3832):在android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:713)
09-29 17:52:43.536:E / AndroidRuntime(3832):在android.view.LayoutInflater.inflate(LayoutInflater.java:469)
09-29 17:52:43.536:E / AndroidRuntime(3832):在android.view.LayoutInflater.inflate(LayoutInflater.java:397)
09-29 17:52:43.536:E / AndroidRuntime(3832):在android.view.LayoutInflater.inflate(LayoutInflater.java:353)
09-29 17:52:43.536:E / AndroidRuntime(3832):在com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:267)
09-29 17:52:43.536:E / AndroidRuntime(3832):在android.app.Activity.setContentView(Activity.java:1895)
09-29 17:52:43.536:E / AndroidRuntime(3832):在com.mydomain.myproj.MapHolder .onCreate(MapHolder的.java:19)
09-29 17:52:43.536:E / AndroidRuntime(3832):在android.app.Activity.performCreate(Activity.java:5133)
09-29 17:52:43.536:E / AndroidRuntime(3832):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
09-29 17:52:43.536:E / AndroidRuntime(3832):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
09-29 17:52:43.536:E / AndroidRuntime(3832):11 ...更多
09-29 17:52:43.536:E / AndroidRuntime(3832):由:java.lang.ClassCastException:com.google.android.gms.maps.SupportMapFragment不能转换为android.app.Fragment
09-29 17:52:43.536:E / AndroidRuntime(3832):在android.app.Fragment.instantiate(Fragment.java:585)
09-29 17:52:43.536:E / AndroidRuntime(3832):在android.app.Fragment.instantiate(Fragment.java:560)
09-29 17:52:43.536:E / AndroidRuntime(3832):在android.app.Activity.onCreateView(Activity.java:4738)
09-29 17:52:43.536:E / AndroidRuntime(3832):在android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:689)
09-29 17:52:43.536:E / AndroidRuntime(3832):20 ...更多
 

解决方案

您正试图蒙上了 SupportMapFragment 是一个原生API级别11 android.app.Fragment 。这是行不通的。或者:

设置你的安卓的minSdkVersion 11或更高,并使用 MapFragment 而不是 SupportMapFragment

你要把你的 SupportMapFragment 是一个 android.support.v4.app.Fragment

  

问题是,如果我从FragmentActivity扩展它,我不能显示ApplicationBar标签

操作栏添加在API级别11至Android如果你希望使用旧版本的Andr​​oid的操作栏,您将需要使用一个补丁包,无论是的 ActionBarSherlock 或的AppCompat反向移植的支持Android包。

Java 混淆工具 ProGuard 之初体验

I have MainActivity class which have method which instantiate ApplicationBar, all other Activities are inherited form this MainActivity so they can use this method.

But I also have a class MapHolder which has to be extended from FragmentActivity as in xml it uses a fragment to display map. The issue is if I extend it from FragmentActivity I cannot display ApplicationBar Tabs and if I extend it from MainActivity than I can't display maps and it gives this error:

LogCat Output:

    09-29 17:52:10.107: E/GooglePlayServicesUtil(3788): Google Play services is invalid. Cannot recover.
09-29 17:52:43.536: E/AndroidRuntime(3832): FATAL EXCEPTION: main
09-29 17:52:43.536: E/AndroidRuntime(3832): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mydomain.myproj/com.mydomain.myproj.MapHolder }: android.view.InflateException: Binary XML file line #2: Error inflating class fragment
09-29 17:52:43.536: E/AndroidRuntime(3832):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
09-29 17:52:43.536: E/AndroidRuntime(3832):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
09-29 17:52:43.536: E/AndroidRuntime(3832):     at android.app.ActivityThread.access$600(ActivityThread.java:141)
09-29 17:52:43.536: E/AndroidRuntime(3832):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
09-29 17:52:43.536: E/AndroidRuntime(3832):     at android.os.Handler.dispatchMessage(Handler.java:99)
09-29 17:52:43.536: E/AndroidRuntime(3832):     at android.os.Looper.loop(Looper.java:137)
09-29 17:52:43.536: E/AndroidRuntime(3832):     at android.app.ActivityThread.main(ActivityThread.java:5103)
09-29 17:52:43.536: E/AndroidRuntime(3832):     at java.lang.reflect.Method.invokeNative(Native Method)
09-29 17:52:43.536: E/AndroidRuntime(3832):     at java.lang.reflect.Method.invoke(Method.java:525)
09-29 17:52:43.536: E/AndroidRuntime(3832):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
09-29 17:52:43.536: E/AndroidRuntime(3832):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
09-29 17:52:43.536: E/AndroidRuntime(3832):     at dalvik.system.NativeStart.main(Native Method)
09-29 17:52:43.536: E/AndroidRuntime(3832): Caused by: android.view.InflateException: Binary XML file line #2: Error inflating class fragment
09-29 17:52:43.536: E/AndroidRuntime(3832):     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:713)
09-29 17:52:43.536: E/AndroidRuntime(3832):     at android.view.LayoutInflater.inflate(LayoutInflater.java:469)
09-29 17:52:43.536: E/AndroidRuntime(3832):     at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
09-29 17:52:43.536: E/AndroidRuntime(3832):     at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
09-29 17:52:43.536: E/AndroidRuntime(3832):     at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:267)
09-29 17:52:43.536: E/AndroidRuntime(3832):     at android.app.Activity.setContentView(Activity.java:1895)
09-29 17:52:43.536: E/AndroidRuntime(3832):     at com.mydomain.myproj.MapHolder .onCreate(MapHolder .java:19)
09-29 17:52:43.536: E/AndroidRuntime(3832):     at android.app.Activity.performCreate(Activity.java:5133)
09-29 17:52:43.536: E/AndroidRuntime(3832):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
09-29 17:52:43.536: E/AndroidRuntime(3832):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
09-29 17:52:43.536: E/AndroidRuntime(3832):     ... 11 more
09-29 17:52:43.536: E/AndroidRuntime(3832): Caused by: java.lang.ClassCastException: com.google.android.gms.maps.SupportMapFragment cannot be cast to android.app.Fragment
09-29 17:52:43.536: E/AndroidRuntime(3832):     at android.app.Fragment.instantiate(Fragment.java:585)
09-29 17:52:43.536: E/AndroidRuntime(3832):     at android.app.Fragment.instantiate(Fragment.java:560)
09-29 17:52:43.536: E/AndroidRuntime(3832):     at android.app.Activity.onCreateView(Activity.java:4738)
09-29 17:52:43.536: E/AndroidRuntime(3832):     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:689)
09-29 17:52:43.536: E/AndroidRuntime(3832):     ... 20 more

解决方案

You are attempting to cast a SupportMapFragment to be a native API Level 11 android.app.Fragment. That will not work. Either:

Set your android:minSdkVersion to 11 or higher, and use MapFragment instead of SupportMapFragment, or

Cast your SupportMapFragment to be an android.support.v4.app.Fragment

The issue is if I extend it from FragmentActivity I cannot display ApplicationBar Tabs

The action bar was added to Android in API Level 11. If you wish to use an action bar on older versions of Android, you will need to use a backport, either ActionBarSherlock or the AppCompat backport in the Android Support package.

 
精彩推荐
图片推荐