1
votes

ClassCastException ContentFrameLayout androidx contre support.v7 dans l'application système

Exception étrange Je reçois une application système lorsque j'utilise uniquement FrameLayout dans mon SampleActivity.

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;

J'ai donc regardé dans le code source de AppCompatDelegateImpl présent ici: AppCompatDelegateImpl

importe dans SampleActivity.java:

Caused by: java.lang.ClassCastException: androidx.appcompat.widget.ContentFrameLayout cannot be cast to android.support.v7.widget.ContentFrameLayout
05-22 08:41:05.357 10520 10520 E AndroidRuntime: at android.support.v7.app.AppCompatDelegateImpl.createSubDecor(AppCompatDelegateImpl.java:685)
05-22 08:41:05.357 10520 10520 E AndroidRuntime: at android.support.v7.app.AppCompatDelegateImpl.ensureSubDecor(AppCompatDelegateImpl.java:516)
05-22 08:41:05.357 10520 10520 E AndroidRuntime: at android.support.v7.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:464)
05-22 08:41:05.357 10520 10520 E AndroidRuntime: at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140)
05-22 08:41:05.357 10520 10520 E AndroidRuntime: at com.sample.SampleActivity.onCreate(SampleActivity.java:98)

Bien que cette classe fasse partie d'android appcompat.v7 , mais en interne, elle importe androidx.appcompat.widget.ContentFrameLayout Cela implique-t-il que appcompat. v7 utilise en interne les dépendances androidx? Si oui, pourquoi j'obtiens cette exception?

Remarque : veuillez éviter de donner des solutions basées sur les gradins car il s'agit d'une application système.


6 commentaires

ajouter des fichiers gradle


@Basi C'est une application système et non une application standard, donc elle n'a pas de gradle.


Partagez le code complet de votre activité. Si possible, partagez le lien vers le référentiel.


Désolé de ne pas pouvoir le faire. Vous pouvez me demander n'importe quel code spécifique que vous recherchez, je le partagerai. @BelalKhan


Ensuite, publiez au moins le code d'activité complet ici. Ou la ligne où vous essayez de faire un casting.


@Belal Pensez à lire la question et le journal des erreurs. Je n'utilise nulle part ce ContentFrameLayout.


3 Réponses :


0
votes

Mettez à jour vos instructions d'importation. Vous utilisez une classe avec le même nom mais provenant de packages différents.


1 commentaires

Que veux-tu dire ? Veuillez noter que je n'utilise nulle part "ContentFrameLayout"



1
votes

Accédez au fichier gradle.properties et assurez-vous que

android.useAndroidX=false

Si vous définissez ceci sur true , le plug-in Android utilisera la bibliothèque AndroidX au lieu de la bibliothèque de support. En outre, si vous ne parvenez pas à trouver useAndroidX dans gradle.properties , essayez de l'ajouter et effectuez une synchronisation de gradle.


2 commentaires

@TheLittleNaruto Le ContentFrameLayout dont vous disposez dans SampleActivity fait partie de androidx.appcompat.widget . Le ContentFrameLayout dont vous avez besoin se trouve à l'intérieur android.support.v7.widget . Essayez d'utiliser import android.widget.FrameLayout; et voyez s'il est lié à la bibliothèque de support.


J'utilise uniquement ce FrameLayout.



3
votes

Le correctif consistait à inclure les dépendances androidx dans le fichier Android.mk .

Nous avons également dû modifier toutes les importations de classes de bibliothèque de support vers androidx, comme suggéré sur le site des développeurs Android: https://developer.android.com/jetpack/androidx/migrate


0 commentaires