ClassCastException: CustomFragment не может быть добавлен в android.app.Fragment/Использование android.support.v4.app.Fragment

108
14

Я разрабатываю приложение, разделенное на одну библиотеку и два приложения: 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.

спросил(а) 2012-07-11T19:04:00+04:00 7 лет, 8 месяцев назад
1
Решение
95

Ваша деятельность должна быть расширена FragmentActivity.

ответил(а) 2013-04-10T20:33:00+04:00 6 лет, 11 месяцев назад
52

Вероятно, вы ошибаетесь (смешанный) импорт и instad


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;

следовательно, проблема броска.

ответил(а) 2013-04-10T22:29:00+04:00 6 лет, 11 месяцев назад
37

Я только что столкнулся с той же проблемой,
в моем случае вызов super.onCreate(Bundle) перед настройкой макета с помощью setContentView (int) решил ClassCastException

ответил(а) 2015-04-03T15:07:00+03:00 4 года, 11 месяцев назад
36

Вы решили это каким-то образом? Если нет, вы должны проверить свой файл манифеста, если есть активность, объявленная с вашим именем фрагментов. (если это так, удалите их)

ответил(а) 2013-06-04T11:14:00+04:00 6 лет, 9 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема