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屋!