Android:support.v4.app.Fragment - > Fragment classcastexception的解决方法?

koi*_*ing 6 android backwards-compatibility android-fragments

我正在尝试添加support.v4.app.Fragment一个PreferenceActivity标题,如下所示:

<header
    android:fragment="com.example.SupportFragmentSubClass"
    android:title="Selecting this should show the accompanying fragment" >
</header>
Run Code Online (Sandbox Code Playgroud)

这会抛出一个ClassCastException,大概是因为PreferenceActivity正在期望一个子类android.app.Fragment,而不是support.v4.app.Fragment.

我的用例是:
我有非标准片段,我想在<3.0和> 3.0设备上作为首选项使用.对于> = 3.0,我需要一个android.app.Fragment子类,因此它可以嵌入到平板电脑设备上的首选项活动的"详细信息窗格"中.对于<3.0,我需要一个v4.support.app.Fragment子类,所以我可以抛出它ActivityFragment.

有没有一种解决方法可以让我在这种情况下使用兼容性片段?

Com*_*are 7

PreferenceFragment不在Android支持包中,您不能以PreferenceActivity这种方式使用Android支持包Fragment类.此外,你的标题无论如何都无法在Android 2.x上运行,因为PreferenceActivityAndroid 2.x中不知道片段.

原则上,您可以PreferenceActivity从源代码中派生出一个使用Android Support版本的源代码Fragment.

或者,整理您的偏好设置以在Android 3.0+上使用片段,并在Android 2.x上避免它们.这是一个示例项目,我演示了一种方法.