Je veux injecter mes fragments Androidx avec le poignard 2. Dans mon activité, j'ai:
public class MainActivity extends AppCompatActivity implements HasSupportFragmentInjector
{
@Inject Reposetory reposetory;
@Inject DispatchingAndroidInjector<androidx.fragment.app.Fragment> dispatchingAndroidInjector;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public AndroidInjector<androidx.fragment.app.Fragment> supportFragmentInjector()
{
return dispatchingAndroidInjector;
}
}
le problème est quand je veux construire le projet, j'obtiens cette erreur:
error: cannot find symbol class MapBuilder
et quand je change androidx.fragment.app.Fragment en fragment dans DispatchingAndroidInjector, je ne reçois plus cette erreur.
Androidx n'est pas encore pris en charge, mais l'activation du jetifier pourrait peut-être résoudre votre problème.
Ajoutez simplement le code ci-dessous à votre gradle.properties
Android.useAndroidX=true
Android.enableJetifier=true
Voir également ces questions pour plus de détails:
comme suggéré précédemment, 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)
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.