Soy consciente de que hay muchas respuestas, pero pensé que podría proporcionar mi implementación también. (Los detalles completos se pueden encontrar en otra pregunta que respondí ).
Entonces, para agregar un escucha de clics, su ViewHolder
clase interna necesita implementarse View.OnClickListener
. Esto se debe a que va a configurar una OnClickListener
al itemView
parámetro del ViewHolder
constructor 's. Déjame mostrarte lo que quiero decir:
public class ExampleClickViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
TextView text1, text2;
ExampleClickViewHolder(View itemView) {
super(itemView);
// we do this because we want to check when an item has been clicked:
itemView.setOnClickListener(this);
// now, like before, we assign our View variables
title = (TextView) itemView.findViewById(R.id.text1);
subtitle = (TextView) itemView.findViewById(R.id.text2);
}
@Override
public void onClick(View v) {
// The user may not set a click listener for list items, in which case our listener
// will be null, so we need to check for this
if (mOnEntryClickListener != null) {
mOnEntryClickListener.onEntryClick(v, getLayoutPosition());
}
}
}
Las únicas otras cosas que necesita agregar son una interfaz personalizada para usted Adapter
y un método de establecimiento:
private OnEntryClickListener mOnEntryClickListener;
public interface OnEntryClickListener {
void onEntryClick(View view, int position);
}
public void setOnEntryClickListener(OnEntryClickListener onEntryClickListener) {
mOnEntryClickListener = onEntryClickListener;
}
Entonces su nuevo soporte de clics Adapter
está completo.
Ahora, usémoslo ...
ExampleClickAdapter clickAdapter = new ExampleClickAdapter(yourObjects);
clickAdapter.setOnEntryClickListener(new ExampleClickAdapter.OnEntryClickListener() {
@Override
public void onEntryClick(View view, int position) {
// stuff that will happen when a list item is clicked
}
});
Básicamente, es cómo configurar un normal Adapter
, excepto que usa el método de establecimiento que creó para controlar lo que hará cuando su usuario haga clic en un elemento de la lista en particular.
También puede ver un conjunto de ejemplos que hice en este Gist en GitHub:
https://gist.github.com/FarbodSalamat-Zadeh/7646564f48ee708c1582c013e1de4f07