java - 如何使用 Dagger 2 将上下文传递给适配器?

标签 java dependency-injection dagger-2 android-context

我正在学习本教程的 DI/MVP/Retrofit/Rx 基础 Dagger 2 Retrofit MVp .

一切都很完美,但我在 Adapter 中使用上下文时遇到问题,如果这不仅仅是意图,我可以使用某种方法在不使用上下文的情况下打开 Activity ,但我使用的是名为 的库毕加索

@Override
public void onBindViewHolder(@NonNull final BookViewHolder holder, final int position) {

    holder.txt_price.setText(new StringBuilder(bookList.get(position).Price).append(" تومان").toString());
    holder.txt_drink_name.setText(bookList.get(position).Name);

//        Picasso.with(context)
//                .load(bookList.get(position).Link)
//                .into(holder.img_product);

}

在 DI 之前我使用 Context context 但现在我不能只添加它并将它用于我的 Picasso 库,使用与否并不重要,我只是想知道如何传递上下文

@Inject
public BookAdapter(ClickListener clickListener) {
    this.clickListener = clickListener;
    bookList = new ArrayList<>();
}

我所做的一切都是基于上面的教程,唯一改变的是我之前使用上下文的 Picasso。

我正在学习这个,并且我对其他步骤非常满意,我正在尝试弄清楚我应该怎么做才能使这成为可能,我是否应该创建另一个模块或任何可以提供帮助的模块。

谢谢。

最佳答案

仅仅因为您使用 Dagger 并不意味着您必须将它用于所有事情。不将 Dagger 用于 UI/View 相关的东西通常更有意义。

在这种情况下,最简单的方法是使用 View 上下文。

@Override
public void onBindViewHolder(@NonNull final BookViewHolder holder, final int position) {
  final Context context = holder.itemView.getContext();

  Picasso.with(context)
    .load(bookList.get(position).Link)
    .into(holder.img_product);
}

当然,如果您愿意,也可以注入(inject)上下文。一旦将上下文绑定(bind)到组件,上下文就可以像任何其他对象一样被注入(inject)。一种方法是使用 @BindsInstance 将其直接绑定(bind)到 Component.BuilderSubcomponent.Builder 中.

关于java - 如何使用 Dagger 2 将上下文传递给适配器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53597990/

相关文章:

JavaFX/FXML 将 ChoiceBox 添加到根 Pane

java - 每个网页 View 的数据库条目(分析)

java - 根据 id 返回列表的元素

c# - 通过依赖注入(inject)执行我的类函数

android - Hilt ClassCastException : ViewComponentManager$FragmentContextWrapper cannot be cast to AppCompatActivity

java - indexOf() - 列表 - Android - 无法正常工作

java - 指南:范围相关问题

dependency-injection - Aurelia Typescript DI - 实例化 HTTP 获取

android - 未初始化的属性访问异常 : lateinit property has not been initialized

java - Android注入(inject)类返回null