ClasscastException su una sottoclasse di Listfragment utilizzando la libreria di compatibilità
-
28-10-2019 - |
Domanda
Ciò accade solo quando si utilizza la libreria di compatibilità per i dispositivi pre-3.0
Sto ricevendo un errore che non riesco a definire. Ho un'attività con un elenco e un frammento standard. È proprio come l'esempio fornito nella sezione Developer della Guida Dev Android.
Sottoclasse ListFragment (nessuna funzione sovrascritta)
public class ItemListFragment extends ListFragment
Attività principale
public class ItemViewerActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.item_viewer);
}
}
Layout XML per Mainttività
<?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>
Messaggio di errore da Logcat
Errore/AndroidRuntime: causato da: java.lang.classcastException: org.example.itemlistfragment non può essere lanciato su Android.App.Fragment
Soluzione
Dopo un po 'di googling serio, ho trovato un articolo che ha sottolineato un bel bocconcino. Quando si utilizza la libreria di compatibilità, le tue attività che utilizzano frammenti devono estendere la frammentazione. Una volta che l'ho fatto, l'errore non si è più presentato.
Altri suggerimenti
Per me il problema era che avevo dimenticato di cambiare il manifest. Seguendo il suggerimento del tutorial, ho convertito la mia attività in un frammento e ho fatto un'attività di conchiglia per chiamarla. Il mio manifest indicava ancora la classe di frammenti che portava a un'eccezione del cast di classe.