ClassCastException:CustomFragment无法强制转换为android.app.Fragment /使用android.support.v4.app.Fragment

时间:2012-07-11 16:04:02

标签: android android-fragments android-support-library

我正在开发一个分为一个库和两个应用程序的应用程序:1个用于手机,另一个用于平板电脑。库中定义了许多代码和布局,并且在应用程序中只定义了几个部分。

我在Activity中使用片段,电话版本为ViewPager(图书馆中定义的布局和活动,在电话应用程序中无需更改)。 对于平板电脑版本,我希望并排显示我的片段(2),而不是ViewPager,所以我尝试构建这样的XML布局:

<....>
    <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>
</....>

我的问题是代码正在我的手机应用程序上运行,但不在我的平板电脑应用程序上。在这一个,我得到这个异常堆栈:

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)

错误消息涉及android.app.Fragment我期望的android.support.v4.app.Fragment

搜索网页后,我检查了以下几点:

  • 我的活动延伸android.support.v4.app.FragmentActivity
  • 我的片段扩展android.support.v4.app.Fragment
  • 我的应用程序使用support.v4库。

4 个答案:

答案 0 :(得分:6)

你的活动必须由FragmentActivity扩展。

答案 1 :(得分:2)

您可能错误(混合)导入而不是

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

你有

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

因此演员问题。

答案 2 :(得分:0)

你有没有以任何方式解决这个问题?如果没有,您应该检查清单文件,如果有一个使用您的碎片名称声明的活动。 (如果是,请删除它们)

答案 3 :(得分:0)

我刚遇到同样的问题, 在我的情况下,在使用setContentView(int)设置布局之前调用super.onCreate(Bundle)解决了ClassCastException