java - 单击项目后,如何在 RecyclerView 的适配器内从可绘制更改 imageView 的图像?
问题描述
- 我从 SERVER 获取数据以填充 RECYCLER 视图
- 我在每个 recyclerview 行中有一个 imageview
当我单击该图像视图时,我想将我的可绘制对象加载到图像视图中
holder.imageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Drawable placeholder = holder.imageView.getContext().getResources().getDrawable(R.drawable.app); holder.imageView.setImageDrawable(placeholder); } });
以上是我尝试过的,但它说“持有人”需要被宣布为最终的,但实际上,我什至没有以我可以写“最终持有人”之类的方式提到它。
我的适配器代码:
public class ProductsAdapter extends
RecyclerView.Adapter<ProductsAdapter.ProductViewHolder> {
private Context mCtx;
private List<Product> productList;
public ProductsAdapter(Context mCtx, List<Product> productList) {
this.mCtx = mCtx;
this.productList = productList;
}
@Override
public ProductViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(mCtx);
View view = inflater.inflate(R.layout.product_list, null);
return new ProductViewHolder(view);
}
@Override
public void onBindViewHolder(ProductViewHolder holder, int position) {
final Product product = productList.get(position);
//loading the image
Glide.with(mCtx)
.load(product.getImage())
.into(holder.imageView);
holder.textViewTitle.setText(product.getTitle());
holder.textViewShortDesc.setText(product.getShortdesc());
holder.textViewRating.setText(String.valueOf(product.getRating()));
holder.textViewPrice.setText(String.valueOf(product.getPrice()));
holder.imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Drawable placeholder = holder.imageView.getContext().getResources().getDrawable(R.drawable.app);
holder.imageView.setImageDrawable(placeholder);
}
});
}
@Override
public int getItemCount() {
return productList.size();
}
class ProductViewHolder extends RecyclerView.ViewHolder {
TextView textViewTitle, textViewShortDesc, textViewRating, textViewPrice;
ImageView imageView;
public ProductViewHolder(View itemView) {
super(itemView);
textViewTitle = itemView.findViewById(R.id.textViewTitle);
textViewShortDesc = itemView.findViewById(R.id.textViewShortDesc);
textViewRating = itemView.findViewById(R.id.textViewRating);
textViewPrice = itemView.findViewById(R.id.textViewPrice);
imageView = itemView.findViewById(R.id.imageView);
}
}
}
解决方案
final
您可以在方法头中声明持有者
public void onBindViewHolder(final ProductViewHolder holder, int position) {
Your code here
}
推荐阅读
- python - 如何将函数合并到带输入的函数中?
- next.js - 如何部署 Next.js SSG 需要超过 45 分钟才能完成?
- java - 如何解决 JDBC 和 GUI 中的 SQLite [数据库锁定] 问题
- android - Xamarin - “ManifestMerger”任务意外失败
- spring-boot - 在url/fr/、/en/等中添加语言国际化spring boot mvc
- c - 如何在多线程中使用 memory_buffer_alloc_init()?
- c++ - 使用 CMake find_package() 时无法打开源文件“GL/glew.h”
- suffix-tree - 为什么这个字符串的后缀树中这两个节点之间没有后缀链接?
- javascript - 在我的网站上实现服务器和客户端的 2FA
- sql-server - SQL Express 2019 远程访问不起作用