Estoy usando AndroidInjection.inject(this)
para inyectar componentes en una actividad.
AndroidInjection
también tiene un método sobrecargado que toma android.app.Fragment
como parámetro. Pero mis fragmentos se extienden android.support.v4.app.Fragment
y no existe un método correspondiente.
Pregunta: ¿Cómo utilizar la inyección si un fragmento se extiende android.support.v4.app.Fragment
?
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á