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.