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(R.id.recycler_view);
LinearLayoutManager llm=new LinearLayoutManager(this);
rv.setLayoutManager(llm);
MyRVAdapter rva=new MyRVAdapter(persons);
rv.setAdapter(rva);
rv.setOnClickListener(new View.OnClickListener() {
@Override
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!
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) {
super(itemView);
.......
itemView.setOnClickListener(this);
}
@Override
public void onClick(View v) {
.......
}
}
Inside onCreateViewHolder
of your adapter , pass the inflated view to the constructor of ViewGroup
something like ,
@Override
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;
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With