我想直接将点击的项目ID传递给详细演示者。我的详细信息活动有一个公共财产,因此我尝试将其提供给演示者。
这是我的代码;
@Module
public class MovieDetailActivityModule {
@Provides
Long provideMovieId(MovieDetailActivity movieDetailActivity) {
return movieDetailActivity.movieId;
}
}
@Inject
MovieDetailPresenter(
@NonNull MovieDetailContract.View view,
@NonNull MovieRepository movieRepository,
@NonNull Long movieId) {
mView = view;
mMovieRepository = movieRepository;
mMovieId = movieId;
}
我收到以下错误,
没有@Inject构造函数或@Provides注释方法无法提供MovieDetailActivity。此类型支持成员注入,但不能隐式提供。
最佳答案
您必须首先提供您的MovieDetailActivity
,因此将MovieDetailActivity
传递给MovieDetailActivityModule
构造函数,并在您的模块中提供活动,例如:
@Provides
@SomeScope
public MovieDetailActivity activity(){
return this.activity;
}
但是请注意,将活动传递到匕首的模块不是一个好的模式。
另外,您应该使用作用域机制,只要它存在作用域,它就关心保持类的单个实例,您当前的代码似乎也会引起内存泄漏。
如果您使用新的android-dagger扩展名,则可以在模块构建器中覆盖
seedInstance
来访问您的活动@Subcomponent.Builder abstract class Builder extends AndroidInjector.Builder<YourActivity> {
public abstract Builder yourModule(YourModule module);
@Override public void seedInstance(YourActivity activity) {
yourModule(new YourModule(activity.movieId));
}
}