匕首2:如何对片段使用注入

Sas*_*ota 2 java android android-fragments dagger dagger-2

AndroidInjection.inject(this)用来将组件注入活动中。

AndroidInjection也有一个android.app.Fragment以参数为重载的方法。但是我的片段扩展了android.support.v4.app.Fragment,没有相应的方法。

问题:如果碎片延伸,如何使用注射android.support.v4.app.Fragment

dan*_*_21 5

对于支持库片段,您需要使用支持注入。这里有一些例子:

@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();
    }
}
Run Code Online (Sandbox Code Playgroud)

应用程序,如果需要例如Multidex实现,则可以使用DaggerApplication或简单的HasSomeIjection :

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

下一个模块:

@Module
public abstract class FragmentModule {
    @ContributesAndroidInjector
    abstract ContactsFragment bindContactsFragment();
}
Run Code Online (Sandbox Code Playgroud)

活动模块:

@Module
public abstract class ActivityModule {
    @ContributesAndroidInjector
    abstract ContactsActivity bindContactsActivity();
}
Run Code Online (Sandbox Code Playgroud)

和片段:

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

public class ContactsFragment extends DaggerFragment {

    @Inject
    ContactsPresenter mContactsPresenter;

    // .....
}
Run Code Online (Sandbox Code Playgroud)

如果您不想使用DaggerFragment,则可以打开其实现并通过必要的更改将其复制到片段中。这里的主要功能是使用AndroidSupportInjectionModule。希望能帮到你