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);
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:
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 } }
在Viewholder类中,您可以设置OnClickListener,但是您需要另一个接口才能将OnClick寄存器传递回适配器(或者您的预期目标所在的位置)。
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.