web-dev-qa-db-fra.com

Injection de fragments Androidx à l'aide de Dagger 2

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.

5
mahdi jamshidian

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:

10
Saeed Masoumi

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)

1
cherif

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.

0
mallaudin