ClassCastException для подкласса ListFragment с использованием библиотеки совместимости

Это происходит только при использовании библиотеки совместимости для устройств до версии 3.0

Я получаю сообщение об ошибке, которое не могу определить. У меня есть активность с ListFragment и стандартным фрагментом. Это похоже на пример, представленный в разделе "Разработчики" в Android Dev Guide.

Подкласс ListFragment (без переопределения функций)

public class ItemListFragment extends ListFragment

Основная деятельность

public class ItemViewerActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.item_viewer);
    }
}

XML-макет для MainActivity

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:orientation="horizontal">
  <fragment class="org.example.ItemListFragment"
    android:id="@+id/item_list_fragment"
    android:layout_width="0dp"
    android:layout_height="fill_parent"
    android:layout_weight="1" />
  <FrameLayout
    android:id="@+id/item_info_frame"
    android:layout_width="0dp"
    android:layout_height="fill_parent"
    android:layout_weight="1" />
</LinearLayout>

Сообщение об ошибке от LogCat

ОШИБКА /AndroidRuntime: Причина: java.lang.ClassCastException: org.example.ItemListFragment не может быть приведен к android.app.Fragment.

2 ответа

Решение

После некоторого серьезного поиска в Интернете я нашел статью, в которой указывалось на приятный маленький кусочек. При использовании библиотеки совместимости ваши действия, использующие фрагменты, должны расширять FragmentActivity. Как только я это сделал, ошибка больше не появлялась.

Для меня проблема заключалась в том, что я забыл изменить манифест. Следуя предложению учебника, я преобразовал свою активность во фрагмент и создал оболочку для ее вызова. Мой манифест все еще указывал на класс Fragment, ведущий к исключению класса Cast.

Другие вопросы по тегам