Estoy reemplazando mi lista ListView
con RecyclerView
, que se muestra bien, pero me gustaría saber cómo hacer clic en el elemento y su posición, similar al métodoOnItemClickListener.onItemClick(AdapterView parent, View v, int position, long id)
que usamos en ListView
.
¡Gracias por las ideas!
Respuestas:
Basado en el enlace: ¿Por qué RecyclerView no tiene onItemClickListener ()? y ¿En qué se diferencia RecyclerView de Listview? , y también la idea general de @ Duncan, doy mi solución aquí:
Defina una interfaz
RecyclerViewClickListener
para pasar el mensaje del adaptador aActivity
/Fragment
:En
Activity
/Fragment
implemente la interfaz, y también pase el oyente al adaptador:En
Adapter
yViewHolder
:Después de la prueba, funciona bien.
[ ACTUALIZAR ]
Dado que API 22,
RecyclerView.ViewHoler.getPosition()
está en desuso, entonces congetLayoutPosition()
.fuente
private static RecyclerViewClickListener itemListener;
de forma estática en el constructor.onBindViewHolder
. Además, no se podía hacer clic en todos los elementos de mi lista (solo en parte del elemento).new MyRecyclerViewAdapter(context, this)
:? Esto podría causar pérdidas de memoriapublic void recyclerViewListClicked(View v, int position);
El modificadorpublic
es redundante para los métodos de interfazfuente
A continuación se muestra un ejemplo para configurar un escucha de clics.
fuente
int position = getAdapterPosition();
Coloque este código donde defina la vista de reciclador en actividad.
Luego haga una clase separada y coloque este código:
fuente
crear un archivo java con el siguiente código
y simplemente use el oyente en su objeto RecyclerView.
fuente
RecyclerItemClickListener
no es una clase de Android predeterminada, debe proporcionar la biblioteca que está utilizando o la clase en sí.Si desea hacer clic en el evento de reciclar-Ver desde la actividad / fragmento en lugar del adaptador, también puede usar el siguiente atajo.
También puede usar otras formas largas como usar la interfaz
fuente
fuente
Utilice el siguiente código: -
fuente
RecyclerView no proporciona tal método.
Para administrar los eventos de clic en RecyclerView terminé implementando onClickListener en mi adaptador, al vincular el ViewHolder: En mi ViewHolder mantengo una referencia a la vista raíz (como puede hacer con sus ImageViews, TextViews, etc.) y al vincular el viewHolder le puse una etiqueta con la información que necesito para manejar el clic (como la posición) y un oyente de clics
fuente
También me he enfrentado al mismo problema.
Quería encontrar la posición del elemento seleccionado / seleccionado del RecyclerView () y realizar algunas operaciones específicas en ese elemento en particular.
El método getAdapterPosition () funciona de maravilla para este tipo de cosas. Encontré este método después de un día de investigación y después de probar muchos otros métodos.
No tiene que utilizar ningún método adicional. Simplemente cree una variable global llamada 'posición' e inicialícela con getAdapterPosition () en cualquiera de los métodos principales del adaptador (clase o similar).
Aquí hay una breve documentación de este enlace .
Feliz de ayudar. No dudes en plantear dudas.
fuente
Mi simple solucion
Simplemente coloque o coloque los datos que necesita obtener de la actividad.
Constructor de adaptadores:
En actividad:
En Adapter onClickLictener en el elemento
en onBindViewHolder
Ahora, cada vez que cambia de posición en RecyclerView, se mantiene en el Holder (o tal vez debería llamarse Listener)
Espero que te sea de utilidad
Mi primera publicación; P
fuente
fuente
Prueba de esta manera
Clase de adaptador:
}
En tu actividad o fragmento:
Nota: Implemente OnItemClickListener según el contexto proporcionado por usted en la actividad o los métodos de fragmentación y anulación.
fuente
Cada vez que utilizo otro enfoque. Las personas parecen almacenar u obtener una posición en una vista, en lugar de almacenar una referencia a un objeto que ViewHolder muestra.
En su lugar, uso este enfoque, y simplemente lo almaceno en ViewHolder cuando se llama a onBindViewHolder (), y establezco una referencia a nula en onViewRecycled ().
Cada vez que ViewHolder se vuelve invisible, se recicla. Así que esto no afecta al gran consumo de memoria.
fuente
La extensión corta para el método Kotlin
devuelve la posición absoluta de todos los elementos (no la posición de solo los elementos visibles).
Y uso
fuente
Utilice getLayoutPosition () en su método java de interfaz personalizada. Esto devolverá la posición seleccionada de un artículo, verifique todos los detalles en
https://becody.com/get-clicked-item-and-its-position-in-recyclerview/
fuente
Desde el diseñador, puede establecer la
onClick
propiedad de listItem en un método definido con un solo parámetro. Tengo un método de ejemplo definido a continuación. El método getAdapterPosition le dará el índice del listItem seleccionado.Para obtener información sobre cómo configurar un RecyclerView, consulte la documentación aquí: https://developer.android.com/guide/topics/ui/layout/recyclerview
fuente
fuente
Después de muchas pruebas y errores, descubrí que hay una manera muy fácil de hacer esto que es creando una interfaz en la clase de adaptador e implementando eso en un fragmento, ahora aquí viene el giro, instalé el modelo de vista dentro de mi función de anulación presente en el fragment ahora puede enviar los datos de esa función a viemodel y desde allí a cualquier lugar.
No sé si este método es un buen método de codificación, pero hágamelo saber en el comentario y, si alguien quiere ver el, hágamelo saber en la sección de comentarios. Abro regularmente el flujo de stackover.
fuente
Si usa Kotlin
fuente
En onViewHolder configure onClickListiner en cualquier vista y en el clic lateral use este código:
Toast.makeText (Drawer_bar.this, "posición" + posición, Toast.LENGTH_SHORT) .show ();
Reemplácelo
Drawer_Bar
con el nombre de su actividad.fuente