ClassCastException sur une sous-classe de ListFragment à l'aide de la bibliothèque de compatibilité
-
28-10-2019 - |
Question
Cela ne se produit que lors de l'utilisation de la bibliothèque de compatibilité pour les appareils antérieurs à 3.0
J'obtiens une erreur que je ne parviens pas à identifier.J'ai une activité avec un ListFragment et un fragment standard.C'est exactement comme l'exemple fourni dans la section Développeurs du Guide des développeurs Android.
Sous-classe ListFragment (aucune fonction remplacée)
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);
}
}
Mise en page Xml pour 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>
Message d'erreur de LogCat
ERREUR / AndroidRuntime: Causé par: java.lang.ClassCastException: org.example.ItemListFragment ne peut pas être converti en android.app.Fragment
La solution
Après quelques recherches approfondies sur Google, j'ai trouvé un article qui faisait ressortir une jolie petite friandise.Lorsque vous utilisez la bibliothèque de compatibilité, vos activités qui utilisent des fragments doivent étendre FragmentActivity.Une fois que j'ai fait cela, l'erreur ne s'est plus présentée.
Autres conseils
Pour moi, le problème était que j'avais oublié de modifier le manifeste.Suite à la suggestion du tutoriel, j'ai converti mon activité en fragment et créé une activité shell pour l'appeler.Mon manifeste indiquait toujours la classe Fragment conduisant à une exception de diffusion de classe.