Vinit Shandilya Vinit Shandilya - 1 year ago 130
Android Question

OnClickListener for RecyclerView

Unlike ListView, the Android RecyclerView seems way too complicated to implement. Since there is no OnItemClickListener for RecyclerView child, I've been trying to implement the following to register click events:

final RecyclerView rv=(RecyclerView)findViewById(;
LinearLayoutManager llm=new LinearLayoutManager(this);
MyRVAdapter rva=new MyRVAdapter(persons);

rv.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
int itemPosition = rv.indexOfChild(v);
Log.d("Tag", String.valueOf(itemPosition));

For some reason, I'm unable to get this code to work. The click event is not registered at all! Can anybody please tell me what am I doing wrong? I've seen some of the solutions, but I thought this is supposed to work. Thanks for your help!

Answer Source

Instead of setting onclicklistener for the entire RecyclerView set it inside the constructor of the ViewHolder class of your Adapter.

Some sample code will be like the following class which is a inner class inside the recyclerview adapter.

     class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

        public ViewHolder(View itemView) {

        public void onClick(View v) {


Inside onCreateViewHolder of your adapter , pass the inflated view to the constructor of ViewGroup something like ,

public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
    View v = LayoutInflater.from(viewGroup.getContext())
            .inflate(R.layout.your_layout, viewGroup, false);
    ViewHolder viewHolder = new ViewHolder(v);
    return viewHolder;