title: Android: On item click listener for RecyclerView Adapter tags: android,android-recyclerview
RecyclerView.Adapter
, unlike its ListView
colleague, does not have a item click listener.
You can, however, use a normal View.OnClickListener
and then use indexOfChild
to get the position of the view in the recycler view.
Add the callback setter to your adapter:
public void setClickListener(View.OnClickListener callback) {
mClickListener = callback;
}
And in your onCreateViewHolder
set that:
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.some_layout, parent, false);
RecyclerView.ViewHoldre holder = new SomeViewHolder(v);
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mClickListener.onClick(view);
}
});
return holder;
}
Now, outside the adapter, you can fetch the position like so:
YOUR_RECYCLER_ADAPTER.setClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int pos = YOUR_REYCLER_VIEW.indexOfChild(v);
...
}
});
And then pos
will have the index of the view.
This is better than having the position passed through in the callback, since any callback binding may have the incorrect position, if the internal position of the views change.