【发布时间】:2015-08-13 20:02:19
【问题描述】:
这是我的申请文件
private AppComponent component;
@Override
public void onCreate() {
super.onCreate();
setupGraph();
}
private void setupGraph() {
component = DaggerAppComponent.builder()
.appModule(new AppModule(this))
.build();
component.inject(this);
}
public AppComponent component() {
return component;
}
应用组件:
@Singleton
@Component(
modules = {
AppModule.class
}
)
public interface AppComponent {
void inject(BaseActivity activity);
void inject(BaseFragment fragment);
}
活动模块:
@Module public final class ActivityModule {
private final Activity activity;
public ActivityModule(Activity activity) {
this.activity = activity;
}
@Provides @ActivityContext
public Context provideActivityContext() {
return activity;
}
/**
* Expose the activity to dependents in the graph.
*/
@Provides @PerActivity
Activity activity() {
return this.activity;
}
@Provides @GetFragmentManager
public FragmentManager provideFragmentManager() {
return ((BaseActivity)activity).getSupportFragmentManager();
}
活动组件:
@PerActivity
@Component(dependencies = AppComponent.class, modules = {ActivityModule.class, PresenterModule.class})
public interface ActivityComponent {
//Exposed to sub-graphs.
Activity activity();
}
我正在像这样在我的 BaseActivity 中进行注入
((MyApplication) getApplication()).component().inject(this)
不确定这种注入是否正确,但我没有收到编译错误。
现在,当我试图访问我的片段中的演示者时,问题就来了,因为它是空的。我将我的演示者模块定义如下
演讲者模块: 1. 第一次尝试
@Module
public class PresenterModule {
@Provides @PerActivity
public Presenter accessPresenter(MyPresenter presenter){
return presenter;
}
}
-
第二次尝试
@模块 公共类 PresenterModule {
@Provides @PerActivity public Presenter accessPresenter(){ return new MyPresenter(); }}
在我的片段中我正在做
@Inject MyPresenter presenter;
在我的 onViewCreated 上,我试图将视图设置为
presenter.setView(this); // This is null
MyPresenter 与 EffectiveAndroidUI 类似,唯一的区别是我的构造函数中没有任何内容。
【问题讨论】:
-
希望您在 Android Manifest 文件中添加了应用程序类名称。没有它,应用程序将工作,但匕首组件将为空。