Android 使用支持碎片时碎片分派和删除
我试图在使用SupportV4片段的同时创建一个简单的Dagger2应用程序。 在修改应用程序后,我遇到了一个奇怪的编译错误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
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);
}