我的 RecyclerView 的 CardView 中有一个 ImageView。 我想捕捉 ImageView 上的 onClick,就像我已经对 ListView 所做的那样。因此,在 public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) 中,我尝试了:
myViewHolder.imageView.setClickable(true);
myViewHolder.imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d("TEST", "Clicked");
}
但这完全被忽略了。以下代码有效:
myViewHolder.imageView.setImageResource(R.drawable.star_yellow);
我能做什么?
最佳答案
这是我在我的项目中所做的。
在项目的某处有一个接口(interface)类:
public interface RecyclerViewClickListener { void onRowClicked(int position); void onViewClicked(View v, int position); }
在您的 RecyclerView.Adapter 类中,将此接口(interface)添加为字段并通过构造函数将其传递给适配器:
public class YourRecAdapter extends RecyclerView.Adapter<YourRecAdapter.SimpleViewHolder>{ private RecyclerViewClickListener listener; public YourRecAdapter(RecyclerViewClickListener listener){ this.listener = listener; } public static class SimpleViewHolder extends RecyclerView.ViewHolder { public SimpleViewHolder(View itemView, final RecyclerViewClickListener listener) { super(itemView); // find view ids here itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(listener != null) listener.onRowClicked(getAdapterPosition()); } }); someViewholderView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(listener != null) listener.onViewClicked(v, getAdapterPosition()); } }); } } }
在您的 Activity/Fragment 中实现接口(interface):
public class YourFragment extends Fragment implements RecyclerViewClickListener { @Override public void onViewClicked(View v, int position) { if(v.getId == R.id.yourDesiredView){ // Do your stuff here } } @Override public void onRowClicked(int position) { // Clicked entire row } }
关于android - 回收站 View : how to catch the onClick on an ImageView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33264042/