[英]RecyclerView: how to catch the onClick on an ImageView?
I have an ImageView in CardViews of my RecyclerView. 我在RecyclerView的CardViews中有一个ImageView。 I would like to catch the onClick on the ImageView, like I already did with the ListView.
我想抓住ImageView上的onClick,就像我已经使用ListView一样。 So, in the public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) I tried with:
所以,在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");
}
but this was totally ignored. 但这完全被忽略了。 The following code is working:
以下代码正在运行:
myViewHolder.imageView.setImageResource(R.drawable.star_yellow);
What can I do? 我能做什么?
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); }
In your RecyclerView.Adapter class, add this interface as a field and pass it to adapter via constructor: 在RecyclerView.Adapter类中,将此接口添加为字段,并通过构造函数将其传递给适配器:
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: 在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 } }
在Viewholder类中,您可以设置OnClickListener,但是您需要另一个接口才能将OnClick寄存器传递回适配器(或者您的预期目标所在的位置)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.