Android 使用支持碎片时碎片分派和删除

Android 使用支持碎片时碎片分派和删除,android,android-fragments,fragment,dagger,Android,Android Fragments,Fragment,Dagger,我试图在使用SupportV4片段的同时创建一个简单的Dagger2应用程序。 在修改应用程序后,我遇到了一个奇怪的编译错误 Error:(35, 8) error: [dagger.android.AndroidInjector.inject(T)] java.util.Map<java.lang.Class<? extends android.support.v4.app.Fragment>,javax.inject.Provider<dagger.android.A

我试图在使用SupportV4片段的同时创建一个简单的Dagger2应用程序。 在修改应用程序后,我遇到了一个奇怪的编译错误

Error:(35, 8) error: [dagger.android.AndroidInjector.inject(T)] java.util.Map<java.lang.Class<? extends android.support.v4.app.Fragment>,javax.inject.Provider<dagger.android.AndroidInjector.Factory<? extends android.support.v4.app.Fragment>>> cannot be provided without an @Provides-annotated method.
java.util.Map<java.lang.Class<? extends android.support.v4.app.Fragment>,javax.inject.Provider<dagger.android.AndroidInjector.Factory<? extends android.support.v4.app.Fragment>>> is injected at
dagger.android.DispatchingAndroidInjector.<init>(injectorFactories)
dagger.android.DispatchingAndroidInjector<android.support.v4.app.Fragment> is injected at
app.series.com.tvshowsapplication.ui.main.MainActivity.fragmentDispatchingAndroidInjector
app.series.com.tvshowsapplication.ui.main.MainActivity is injected at
dagger.android.AndroidInjector.inject(arg0)
应用模块

@Module
public class AppModule {

    @Provides
    @Singleton
    Context provideContext(Application application) {
        return application;
    }


    @Provides
    @Singleton
    CalligraphyConfig provideCalligraphyDefaultConfig() {
        return new CalligraphyConfig.Builder()
                .setDefaultFontPath("fonts/source-sans-pro/SourceSansPro-Regular.ttf")
                .setFontAttrId(R.attr.fontPath)
                .build();
    }
}
和ActivityBuilder

@Module
public abstract class ActivityBuilder {

    @ContributesAndroidInjector(modules = MainActivityModule.class)
    abstract MainActivity bindMainActivity();

}

您需要将其放入一个模块中,然后在组件中注册,但您不必手动声明它,因为Dagger已经有了您可以使用的
AndroidInjectionModule
(或
AndroidSupportInjectionModule

您可以在中找到有关Android设置的更多信息,或者在最近提出的类似问题中看到一些附加信息

您没有显示AppComponent,但很可能只是忘记添加模块,因此可以通过将其添加到组件来修复错误

// add it somehow like this
@Component(modules = { AndroidSupportInjectionModule.class, AppModule.class })
public interface AppComponent {
  void inject(App app);
}

实际上,我在AppComponent中包含了AppModule。请参阅我更新的主页post@AntonMakov我的错,应该是
AndroidSupportInjectionModule
非常感谢您的帮助!将AndroidInjectionModule更改为AndroidSupportInjectionModule解决了我一周来一直在寻找的编译问题。谢谢。给这根线@科托米萨克非常感谢你的留言,这对我很有帮助。
@Module
public class AppModule {

    @Provides
    @Singleton
    Context provideContext(Application application) {
        return application;
    }


    @Provides
    @Singleton
    CalligraphyConfig provideCalligraphyDefaultConfig() {
        return new CalligraphyConfig.Builder()
                .setDefaultFontPath("fonts/source-sans-pro/SourceSansPro-Regular.ttf")
                .setFontAttrId(R.attr.fontPath)
                .build();
    }
}
@Module
public abstract class ActivityBuilder {

    @ContributesAndroidInjector(modules = MainActivityModule.class)
    abstract MainActivity bindMainActivity();

}
// add it somehow like this
@Component(modules = { AndroidSupportInjectionModule.class, AppModule.class })
public interface AppComponent {
  void inject(App app);
}