RecyclerView:如何捕捉 ImageView 上的 onClick? [英] RecyclerView: how to catch the onClick on an ImageView?
问题描述
我的 RecyclerView 的 CardViews 中有一个 ImageView.我想捕捉 ImageView 上的 onClick,就像我已经对 ListView 所做的那样.所以,在 public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) 我试过:
I have an ImageView in CardViews of my RecyclerView. I would like to catch the onClick on the ImageView, like I already did with the ListView. So, in the public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) I tried with:
myViewHolder.imageView.setClickable(true);
myViewHolder.imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d("TEST", "Clicked");
}
但这完全被忽略了.以下代码正在运行:
but this was totally ignored. The following code is working:
myViewHolder.imageView.setImageResource(R.drawable.star_yellow);
我能做什么?
推荐答案
这是我在我的项目中所做的.
Here's what I do in my project.
在您的项目中某处有一个接口类:
Have an interface class somewhere in your project:
public interface RecyclerViewClickListener {
void onRowClicked(int position);
void onViewClicked(View v, int position);
}
在您的 RecyclerView.Adapter 类中,将此接口添加为字段并通过构造函数将其传递给适配器:
In your RecyclerView.Adapter class, add this interface as a field and pass it to adapter via constructor:
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());
}
});
}
}
}
在您的活动/片段中实现接口:
Implement the interface in your Activity / Fragment:
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
}
}
这篇关于RecyclerView:如何捕捉 ImageView 上的 onClick?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!