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.
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)
You probably got wrong (mixed) imports and instad of
you have
hence the cast issue.
I've just came across the same problem, in my case calling super.onCreate(Bundle) before setting layout with setContentView(int) solved the ClassCastException
Your Activity have to be extended by FragmentActivity.