ClassCastException для подкласса ListFragment с использованием библиотеки совместимости - PullRequest
15 голосов
/ 03 мая 2011

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

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

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

public class ItemListFragment extends ListFragment

MainActivity

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 ]

35 голосов
/ 03 мая 2011

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

1 голос
/ 05 октября 2011

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

...