tools support recyclerview item example eventos desde cardview activity abrir android onclick onclicklistener android-recyclerview

android - support - ¿Por qué OnClickListener en un ViewHolder no funciona?



recyclerview onclick get position (2)

Estoy tratando de implementar una forma de manejar la selección de elementos en un RecyclerView . Personalmente, no me gusta la forma sugerida en algunas respuestas sobre el paso de los gestos, y pensé que la implementación de un OnClickListener , como se sugiere here y here , fue muy clara.

El hecho es que ... ¡este patrón realmente no funciona! Realmente no puedo entender por qué nunca se llama a mi OnClickListener.onClick . Es como si otro método interceptara el clic antes de que onClick pueda encargarse de él.

Este es mi código:

public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { TextView tvName; ImageView star; public ViewHolder(View itemView) { super(itemView); tvName = (TextView) itemView.findViewById(R.id.CHAT_ITEM_name); star = (ImageView) itemView.findViewById(R.id.CHAT_ITEM_star); Fonts.setTypeface(tvName, regular); } @Override public void onClick(View view) { int position = getLayoutPosition(); select(position); } }

Desafortunadamente, es muy importante para mí poder acceder a la posición del elemento seleccionado en todo el conjunto de datos para eliminarlo, por lo que hacer algo como indexOfChild no es aceptable también: lo intenté, pero este método le da la posición del elemento en la parte list.remove(position) de la lista, lo que hace que list.remove(position) imposible.


Mirando el código actualizado: no está configurando onClickListener en ninguna de las vistas en ViewHolder. Es un error comprensible olvidar al oyente de clics.

Solo usa:

tvName.setOnClickListener(this); star.setOnClickListener(this);

Puedes configurar ambos o solo uno de ellos. También puede simplemente obtener el diseño principal de estas dos vistas, de modo que se pueda hacer clic en todo el elemento en el adaptador.

itemView.setOnClickListener(this);


Puedes hacerlo en tu onBindViewHolder

@Override public void onBindViewHolder(ReportViewHolder holder, int position { holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { // handle your click here. } }); }