Daga 2: Cómo utilizar la inyección con un fragmento

Sasha Shpota:

Estoy usando AndroidInjection.inject(this)para inyectar componentes en una actividad.

AndroidInjectiontambién tiene un método sobrecargado que toma android.app.Fragmentcomo parámetro. Pero mis fragmentos se extienden android.support.v4.app.Fragmenty no existe un método correspondiente.

Pregunta: ¿Cómo utilizar la inyección si un fragmento se extiende android.support.v4.app.Fragment?

dantes_21:

Para los fragmentos de la biblioteca de apoyo que necesita para utilizar la inyección de apoyo. Aquí algunos ejemplos:

@Singleton
@Component(modules = {
        AndroidSupportInjectionModule.class, // Important
        ActivityModule.class,
        FragmentModule.class
})

public interface AppComponent extends AndroidInjector<App> {

    void inject(App app);

    @Component.Builder
    interface Builder {
        @BindsInstance
        Builder application(Application application);
        AppComponent build();
    }
}

Aplicación, se puede utilizar DaggerApplication o HasSomeIjection sencillo si se necesita, por ejemplo, la aplicación Multidex :

public class App extends MultiDexApplication implements
    HasActivityInjector,
    HasFragmentInjector {

    @Inject DispatchingAndroidInjector<Activity> activityInjector;
    @Inject DispatchingAndroidInjector<Fragment> fragmentInjector;
    private AppComponent mComponent;

    @Override
    public void onCreate() {
        mComponent = DaggerAppComponent.builder().application(this).build();
        mComponent.inject(this);
    }

    // Dependency Injection
    @Override
    public DispatchingAndroidInjector<Activity> activityInjector() {
        return activityInjector;
    }

    @Override
    public DispatchingAndroidInjector<Fragment> fragmentInjector() {
        return fragmentInjector;
    }
}

Módulo siguiente:

@Module
public abstract class FragmentModule {
    @ContributesAndroidInjector
    abstract ContactsFragment bindContactsFragment();
}

módulo de actividad:

@Module
public abstract class ActivityModule {
    @ContributesAndroidInjector
    abstract ContactsActivity bindContactsActivity();
}

Y el fragmento:

import com.some.ContactsPresenter;
import dagger.android.support.DaggerFragment;

public class ContactsFragment extends DaggerFragment {

    @Inject
    ContactsPresenter mContactsPresenter;

    // .....
}

Si no desea utilizar el DaggerFragment, puede abrir su aplicación y copiado en el fragmento con los cambios necesarios. La característica principal aquí es utilizar AndroidSupportInjectionModule. Espero que esto te ayudará

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=185367&siteId=1
Recomendado
Clasificación