我是不熟悉剑柄和匕首的人,不知道我在做什么是错误的还是由于其他原因而不起作用,请多多包涵。
我想将依赖于另一个类的类注入视图持有者类。
视图持有者扩展了BaseViewHolder,我想注入到其中的类是一个依赖于滑行的图像助手类。
我有一个提供滑行的模块
@Module
@InstallIn(ApplicationComponent.class)
public class GlideModule {
@Provides
public static RequestManager provideGlideRequestManager(@ApplicationContext Context context) {
return Glide.with(context);
}
}
此模块在我的应用中的其他地方使用,因此我知道它可以工作。
我已经用@Inject注释了图像助手构造器,并且我试图像这样将滑行注入到此类中
@Inject
public RequestManager glide;
@Inject
public ImageHelper() {
}
然后在我的视图持有人中,我用@Inject注释了图像助手
@Inject
public ImageHelper imageHelper;
public SentenceViewHolder(View view, ItemTouchListener onItemTouchListener, OnStartDragListener mDragStartListener) {
super(view);
this.v = view;
findViewIds(onItemTouchListener, mDragStartListener);
}
在我的findViewIds方法内,我尝试访问图像助手,但其值为空,
所以我试图为它构建一个模块
@Module
@InstallIn(ActivityComponent.class)
public class ImageHelperModule {
@Singleton
@Provides
public ImageHelper provideImageHelper() {
return new ImageHelper();
}
}
感谢您的帮助
答案 0 :(得分:2)
仅向字段添加@Inject
注释不足以让Hilt提供它。您还需要定义EntryPoint
(以某种方式)。
ImageHelper
(无需现场注入)。是Singleton
吗?@Singleton
class ImageHelper {
public RequestManager glide;
@Inject
public ImageHelper(RequestManager glide) {
this.glide = glide;
}
//...
}
EntryPoint
创建一个ViewHolder
,并在ViewHolder's
构造函数中使用它public class SentenceViewHolder extends ViewHolder {
@EntryPoint
@InstallIn(ViewComponent.class)
interface SentenceViewHolderEntryPoint {
public ImageHelper imageHelper();
}
private ImageHelper imageHelper;
public SentenceViewHolder(View view, ItemTouchListener onItemTouchListener, OnStartDragListener mDragStartListener) {
super(view);
resolveDependency(view);
this.v = view;
findViewIds(onItemTouchListener, mDragStartListener);
}
private void resolveDependency(View view) {
SentenceViewHolderEntryPoint hiltEntryPoint = EntryPointAccessors.fromView(view, SentenceViewHolderEntryPoint.class);
imageHelper = hiltEntryPoint.imageHelper();
}
//...
}