java - recyclerview - getadapterposition
Recyclerview addOnItemTouchListener get whichsubview se hace clic dentro de la fila (4)
Implementé Recyclerview onclickListener desde esta solución de desbordamiento de pila . Esta solución funciona bien para los clics de elementos del reciclador. Pero no puedo hacer clic en la subvista (por ejemplo, ImageView, Botón) desde la fila.
mAttachmentRecyclerview.addOnItemTouchListener(
new RecyclerItemClickListener(getApplicationContext(), new RecyclerItemClickListener.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
if (view.getId()==R.id.attachmnet_remove) {
attachmentsList.remove(position);
mAttachmentAdapter.notifyDataSetChanged();
attachmentCount--;
}
}
}
));
onItemClick(view,position)
siempre devuelve ID de vista como -1
¿Cómo hago un seguimiento de la vista en que se hace clic en la vista?
A continuación se muestra un ViewHolder
que contiene dos vistas de texto a saber. title
y description
:
public class CustomViewHolder extends RecyclerView.ViewHolder {
private final OnViewClickListener mListener;
public final TextView title;
public final TextView description;
public interface OnViewClickListener {
void onViewClick(View v, int adapterPosition);
}
public CustomViewHolder(View itemView, OnViewClickListener mListener) {
super(itemView);
this.mListener = mListener;
title = (TextView) itemView.findViewById(R.id.titleTextView);
description = (TextView) itemView.findViewById(R.id.descriptionTextView);
title.setOnClickListener(onClickListener);
description.setOnClickListener(onClickListener);
}
private final View.OnClickListener onClickListener = new View.OnClickListener() {
@Override
public void onClick(View view) {
mListener.onViewClick(view, getAdapterPosition());
}
};
}
Ambas subvistas tienen un OnClickListener
adjunto que llama a la implementación OnViewClickListener
personalizada que pasa la View
que se hizo clic, así como la posición del elemento RecyclerView
en el adaptador que recibió el evento de clic.
Finalmente, use View.getId()
para recuperar el id de la vista OnViewClickListener
en la implementación de OnViewClickListener
.
Esa respuesta está desactualizada porque usa RecyclerView.getChildPosition(View)
que está en desuso . Intente reemplazarlo con RecyclerView.getChildAdapterPosition(View)
.
Si yo fuera tú, solo crearía oyentes para cada ViewHolder
y sus vistas secundarias que quieras escuchar. Honestamente, no me parece ver el beneficio de usar ese método más complicado al que te refieres. Además, ese método solo le dirá que se hizo clic en un elemento, nada sobre las vistas secundarias del elemento.
Además, de acuerdo con los documentos , RecyclerView.OnItemTouchListener
está destinado a ser utilizado cuando desea detectar un toque de un elemento mientras la lista se desplaza, no para toques regulares o directos.
Intenta agregar OnClickListeners a las subvistas.
Establecer etiquetas
Puede configurar Tag a sus vistas al inicializarlas a través de:
view1.setTag(1);
Esto establecerá la etiqueta de vista en 1.
luego en el método onItemClick:
@Override
public void onItemClick(View view, int position) {
if(view.getTag()==1)
{
//do something
}
else
{
//do something else
}