[英]How To Change ImageView drawable For A Single RecyclerView Row
[英]How to change image of imageView from drawable inside an adapter of RecyclerView after an item has been clicked?
當我單擊該圖像視圖時,我想將可繪制對象加載到該圖像視圖中
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); } });
上面是我嘗試過的內容,但是它說“ holder”需要聲明為final,但實際上,我什至沒有提到我可以寫“ finalholder”或其他方式。
我的ADAPTER代碼:
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);
}
}
}
您可以在方法標頭中聲明Holder final
public void onBindViewHolder(final ProductViewHolder holder, int position) {
Your code here
}
有幾種解決方案:
1)讓您的持有人做最后一件事
@Override
public void onBindViewHolder(final ProductViewHolder holder, int position)
或使用其他變量
final Holder finalHolder = holder;
holder.imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Drawable placeholder = finalHolder.imageView.getContext().getResources().getDrawable(R.drawable.app);
holder.imageView.setImageDrawable(placeholder);
}
});
2)在特定視圖上設置ClickListener時,請確保只有該視圖會觸發操作,因此您可以使用該知識
holder.imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ImageView imgView = (ImageView) view;
Drawable placeholder = imgView.getContext().getResources().getDrawable(R.drawable.app);
imgView.setImageDrawable(placeholder);
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.