我想用一个主要活动和多个片段制作一个简单的项目。在这里,我在一个活动中有两个片段,我想将演示者注入登录片段,但它不起作用。我的错误在哪里?主应用程序public class MainApplication extends DaggerApplication{private static ApplicationComponent component;@Overridepublic void onCreate() { super.onCreate(); Utils.init(this);}public static ApplicationComponent getComponent() { return component;}protected AndroidInjector<? extends DaggerApplication> applicationInjector() { component = DaggerApplicationComponent.builder().application(this).build(); component.inject(this); return component; }}主活动.javapublic class MainActivity extends DaggerAppCompatActivity {private Fragment[] mFragments = new Fragment[2];private int curIndex;@InjectHomeFragment homeFragment;@InjectLoginFragment loginFragment;@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if (savedInstanceState != null) { curIndex = savedInstanceState.getInt("curIndex"); } mFragments[AppConstant.HOME_FRAGMENT] = homeFragment; mFragments[AppConstant.LOGIN_FRAGMENT] = loginFragment; FragmentUtils.add(getSupportFragmentManager(), mFragments, R.id.container, curIndex); showCurrentFragment(AppConstant.LOGIN_FRAGMENT);}private void showCurrentFragment(int index) { FragmentUtils.showHide(curIndex = index, mFragments);}@Overridepublic void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) { super.onSaveInstanceState(outState, outPersistentState); outState.putInt("curIndex", curIndex); } }应用组件.java@Singleton@Component(modules = { ContextModule.class, ApiServiceModule.class, AndroidSupportInjectionModule.class, ActivityBuilder.class }) public interface ApplicationComponent extends AndroidInjector<DaggerApplication> {void inject(MainApplication component);@Component.Builderinterface Builder { ApplicationComponent build(); @BindsInstance Builder application(MainApplication application);}}
1 回答
慕标琳琳
TA贡献1830条经验 获得超9个赞
你使用@inject 来注解 LoginFragment 的构造函数,当一个新的实例被请求时,Dagger 构造你的 LoginFragment 类的实例并满足它们的依赖关系(比如 mPresenter 字段)。因为 MainActivitySubcomponent 不访问 LoginFragmentModule,所以 Dagger 给你一个错误,不能提供 LoginContract.Presenter。而不是使用构造函数注入,如果您使用另一种方式为 MainActivity 提供 LoginFragment,则问题将得到解决。您应该从 LoginFragment 构造函数中删除 @inject 并创建一个模块来提供它,如下例所示:
@Module
public class MainModule {
@Provides
public static LoginFragment provideLoginFragment() {
return LoginFragment.newInstance("param1", "param2");
}
}
Dagger 提示:不要对系统实例化的对象使用构造函数注入。在android中,为了在activity和fragment中注入依赖,你应该使用字段注入方法。
添加回答
举报
0/150
提交
取消