Comment injecter un fragment du paquet androidx.fragment.app.Fragment?
J'utilise le framework dagger-Android pour injecter mes dépendances dans mon code.
Comme le dit la documentation, je fais cela pour injecter mon fragment
@Override
public void onAttach(Activity activity) {
AndroidInjection.inject(this);
super.onAttach(activity);
// ...
}
le problème est que la classe AndroidSupportInjection n'accepte que des fragments du package Android.support.v4.app.Fragment ou, si j'utilise la classe AndroidInjection, n'accepte que des fragments du package Android.app.Fragment et que je le souhaite. utilisez des fragments du package androidx.fragment.app.Fragment.
De plus, DaggerFrament s’étend de Android.support.v4.app.Fragment et souhaite utiliser un fragment d’androidx
Et si j'essaie d'implémenter HasSupportFragmentInjector, cette interface utilise également un fragment de Android.support
J'ai eu le même problème dans le cas de HasFragmentInjector. Vous devez utiliser HasSupportFragmentInjector pour l’injection de fragments. En effet, HasFragmentInjector
utilise Android.app.Fragment
qui est non affecté par jetifier
. Vous devez ajouter la bibliothèque Android-dagger-support
. jetifier
convertit tous les support packages
en androidx
dans Studio 3.3 (si jetifier
est activé).
Si jetifier ne change pas les packages support en packages androidx. Vous pouvez télécharger l'outil jetifier
à partir de ici et convertir le fichier Android-dagger-support.aar manuellement à l'aide de la commande suivante.
./jetifier-standalone -i dagger-Android-support-<version>.aar -o <output-name>
Ajoutez ensuite la bibliothèque à votre projet. Ceci est la classe HasSupportFragment après conversion
import androidx.fragment.app.Fragment;
import dagger.Android.AndroidInjector;
public interface HasSupportFragmentInjector {
AndroidInjector<Fragment> supportFragmentInjector();
}
D'une manière ou d'une autre, l'outil Jetifier ne convertissait pas les bibliothèques dans AndroidStudio . Je devais le faire manuellement.
Ajoutez les éléments suivants à votre fichier gradle.properties
Android.useAndroidX = true
Android.enableJetifier = true
J'ai eu une erreur similaire et c'était dû à la version Dagger. Il y a un problème étrange dans la version 2.17, mais si vous revenez à la version 2.16, la compilation est parfaite (à part les indicateurs de gradle.properties publiés par Paul).
À partir de là, en utilisant les tutoriels, vous n'aurez aucun problème. J'ai oublié de mentionner que dans mon projet, j'avais la version non androidX de tout, puis j'ai exécuté la migration androidX proposée par le studio Android, puis j'ai dû changer de version, mais je suppose que si vous le faites dès le début c'est le même.
J'espère que cela vous aidera, si vous changez de serveur et que cela ne fonctionne pas, publiez un peu de votre implémentation de dague et vos versions de plugins et j'essaierai de vous aider davantage!
ajoutez le code ci-dessous à votre fichier gradle.properties
Android.useAndroidX = true
Android.enableJetifier = true
Et si vous essayez d’injecter dans un fragment, vous devez remplacer AndroidInjection.inject(this)
par AndroidSupportInjection.inject(this)
.
Juste pour référence. J'ai eu le même problème. C'était le problème de Jetifier. veuillez mettre à jour votre plugin Gradle Build Tools vers la version 3.3.0
classpath 'com.Android.tools.build:gradle:3.3.0'
Exemple de code: https://github.com/jega-ms/Android-dagger2-mvp-rx