2017-08-19 1 views
0

Comment injecter le sous-composant dagger2 dans Fragment. J'utilise le même sous-composant dans Activity et ça marche bien. Comment puis-je initialiser le module en fragment.Comment le sous-composant Dagger2 injecte-t-il dans Fragment?

partie de mon Fragment

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 

    DgFirebaseSubComponent.Builder builder = (DgFirebaseSubComponent.Builder) 
      ((AttendanceApplication) getActivity().getApplication()).getApplicationComponent() 
        .subcomponentBuilders() 
        .get(DgFirebaseSubComponent.Builder.class) 
        .get(); 
    builder.activityModule(new DgFirebaseSubModule(??how can i initialize module ??)).build().inject(this); 

} 

mon DgFirebaseSubComponent.java

@DgFirebaseScope 
@Subcomponent(modules={ DgFirebaseSubModule.class }) 
public interface DgFirebaseSubComponent { 

void inject(DgAllEmpsAbsMvvmActivity activity); 
void inject(DgAllEmpsAbsListFragment fragment); 

SharedPreferences sharedPreferences(); 

@Subcomponent.Builder 
interface Builder extends SubcomponentBuilder<DgFirebaseSubComponent> { 
    Builder activityModule(DgFirebaseSubModule module); 
    } 

} 

mon DgFirebaseSubModule.java

@Module 
public class DgFirebaseSubModule { 
private final DgAllEmpsAbsMvvmActivity activity; 

public DgFirebaseSubModule(DgAllEmpsAbsMvvmActivity activity) { this.activity = activity; } 


@Provides 
@FirebaseScope 
SharedPreferences providesSharedPreferences(Application application) { 
    return PreferenceManager.getDefaultSharedPreferences(application); 
    } 


} 

Répondre

1

Module ne doit être instancié avec une activité. J'ai changé DgFirebaseSubModule.java

@Module 
public class DgFirebaseSubModule { 

public DgFirebaseSubModule() { } 


@Provides 
@FirebaseScope 
SharedPreferences providesSharedPreferences(Application application) { 
return PreferenceManager.getDefaultSharedPreferences(application); 
    } 

} 

et injecter dans le fragment

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
super.onActivityCreated(savedInstanceState); 

DgFirebaseSubComponent.Builder builder = (DgFirebaseSubComponent.Builder) 
     ((AttendanceApplication) getActivity().getApplication()).getApplicationComponent() 
       .subcomponentBuilders() 
       .get(DgFirebaseSubComponent.Builder.class) 
       .get(); 
builder.activityModule(new DgFirebaseSubModule()).build().inject(this); 

}