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

时间:2018-12-03 16:34:29

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

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

一切正常,但是我在适配器中使用上下文存在问题,如果这不只是意图,我可以使用某种方法来打开活动而不使用上下文,但是我正在使用名为{{1 }}。

Picasso

在DI之前,我使用@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); } ,但现在我不能只添加它并将其用于我的Picasso库,是否使用它并不重要,我只想知道如何传递上下文< / p>

Context context

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

我正在学习此方法,并且在其他步骤中我都很好,我试图弄清楚该怎么做才能使之成为可能,并且我应该创建另一个模块或任何有帮助的模块。

谢谢。

1 个答案:

答案 0 :(得分:3)

仅因为您使用Dagger并不意味着您必须将其用于所有内容。通常不要使用Dagger进行UI / 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);
}

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