java - 如何使用 Dagger 2 将上下文传递给适配器?
问题描述
我正在学习本教程Dagger 2 Retrofit MVp的 DI/MVP/Retrofit/Rx 基础 。
一切都很完美,但是我在适配器中使用上下文时遇到了问题,如果不仅仅是意图,我可以使用某种方法在不使用上下文的情况下打开活动,但我使用的是名为Picasso
.
@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<>();
}
我所做的一切都是基于上面的教程,唯一改变的是我之前使用上下文的毕加索。
我正在学习这个,我对其他步骤很好,我试图弄清楚我应该怎么做才能使这成为可能,我应该创建另一个模块或任何可以帮助的东西。
谢谢。
解决方案
仅仅因为你使用 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);
}
当然,如果您愿意,您也可以注入上下文。一旦将上下文绑定到组件,就可以像任何其他对象一样注入上下文。一种方法是将其直接绑定到您的Component.Builder
或Subcomponent.Builder
使用@BindsInstance
.
推荐阅读
- android-studio - Flutter 控制台日志“发送请求失败:{"jsonrpc":"2.0","id":"9354","method":"getVM","params":{}}"
- reactjs - Reactjs 传递样式有效但不是动态的?
- regex - 捕获任意组项目
- python - 从 sympy 生成优化的倍频程代码
- javascript - Protractor 仅执行列表中的第一个测试套件
- r - 在barplot ggplot2 R中用颜色渐变填充条
- javascript - 在数据表单元格内插入细长条形图
- javascript - 当方法本身更改值时,有什么方法可以停止触发 vuejs watch 方法?
- swift - 有未知类消息,代码将无法连接到我构建的类
- python - PyCharm 无法识别 .py 扩展名