ClassCastException: CustomFragment cannot be cast to android.app.Fragment / Using android.support.v4.app.Fragment

ε祈祈猫儿з 提交于 2019-12-09 16:25:50

问题


I am developing an application divided in one library and two applications : 1 for phones, the other for tablets. A lot of code and layout is defined in the library, and only a few parts are defined in the applications.

I'm using fragments in an Activity, with a ViewPager for the phone version (layout and activity defined in the library, used with no change in the phone application). For the tablet version, I want to show my fragments (2) side by side, and not in a ViewPager, so I tried to build an XML layout like that :

<....>
    <LinearLayout
        android:id="@+id/fragmentsParent"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal" >

        <fragment
            android:id="@+id/f1"
            android:class="com.test.Fragment1"
            android:layout_width="0dip"
            android:layout_height="match_parent"
            android:layout_weight="1" />

        <fragment
            android:id="@+id/f2"
            android:name="com.test.Fragment2"
            android:layout_width="0dip"
            android:layout_height="match_parent"
            android:layout_weight="1"  />
    </LinearLayout>
</....>

My problem is that the code is working on my phone application, but not on my tablet application. On this one, I get this exception stack :

07-11 17:41:14.032: E/AndroidRuntime(14754):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1050)
07-11 17:41:14.032: E/AndroidRuntime(14754):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1782)
07-11 17:41:14.032: E/AndroidRuntime(14754):    ... 11 more

07-11 17:41:14.032: E/AndroidRuntime(14754): Caused by: java.lang.ClassCastException: com.test.Fragment1 cannot be cast to android.app.Fragment

07-11 17:41:14.032: E/AndroidRuntime(14754):    at android.app.Fragment.instantiate(Fragment.java:560)
07-11 17:41:14.032: E/AndroidRuntime(14754):    at android.app.Fragment.instantiate(Fragment.java:535)
07-11 17:41:14.032: E/AndroidRuntime(14754):    at android.app.Activity.onCreateView(Activity.java:4168)
07-11 17:41:14.032: E/AndroidRuntime(14754):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:664)

The error messages talk about android.app.Fragment where I Would expect android.support.v4.app.Fragment.

After searching the web, I checked these points :

  • My activity extends android.support.v4.app.FragmentActivity,
  • My fragments extend android.support.v4.app.Fragment,
  • My application uses the support.v4 library.

回答1:


Your Activity have to be extended by FragmentActivity.




回答2:


You probably got wrong (mixed) imports and instad of

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;

you have

import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;

hence the cast issue.




回答3:


Have you solved this in any way? If not, you should check out your manifest file, if there is an Activity declared with your Fragments name. (if so, remove them)




回答4:


I've just came across the same problem, in my case calling super.onCreate(Bundle) before setting layout with setContentView(int) solved the ClassCastException



来源:https://stackoverflow.com/questions/11436758/classcastexception-customfragment-cannot-be-cast-to-android-app-fragment-usin

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!