0

我是新手,我不知道我在做什么是错误的,还是因为其他原因而无法正常工作,所以请多多包涵。

我想将一个依赖于另一个类的类注入到视图持有者类中。

视图持有者扩展了 BaseViewHolder,我要注入的类是一个依赖于 glide 的图像助手类。

我有一个提供滑行的模块

@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();
}
}

任何帮助表示赞赏

4

1 回答 1

3

仅向字段添加@Inject注释不足以让 Hilt 提供它。您还需要定义一个EntryPoint(以某种方式)。

  1. 简化您的ImageHelper(无需现场注入)。是Singleton吗?
@Singleton
class ImageHelper {
  public RequestManager glide;

  @Inject
  public ImageHelper(RequestManager glide) {
    this.glide = glide;
  }

  //...
}
  1. 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();
  }

  //...
}

于 2020-08-05T11:14:09.740 回答