Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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.
like image 399
elbaquero Avatar asked Jul 11 '12 16:07

elbaquero


2 Answers

Your Activity have to be extended by FragmentActivity.

like image 53
leonvian Avatar answered Oct 20 '22 05:10

leonvian


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.

like image 45
Marcin Orlowski Avatar answered Oct 20 '22 04:10

Marcin Orlowski