Personaliza una lista dinámica Parte de Android Jetpack
Puedes personalizar los objetos RecyclerView para satisfacer tus necesidades específicas. Las clases estándar descritas en Cómo crear listas dinámicas con RecyclerView proporcionan toda la funcionalidad que la mayoría de los desarrolladores necesitan. En muchos casos, solo necesitas diseñar la vista para cada contenedor de vistas y escribir el código para actualizarlas con los datos correspondientes. Sin embargo, si tu app tiene requisitos específicos, puedes modificar el comportamiento estándar de diferentes maneras.
En este documento, se describen algunas de las personalizaciones posibles.
Modifica el diseño
RecyclerView usa un administrador de diseño para posicionar los elementos individuales en la pantalla y determinar cuándo volver a usar las vistas de elementos que ya no ve el usuario. Para volver a usar (o reciclar) una vista, un administrador de diseño puede solicitar al adaptador que reemplace el contenido de la vista por un elemento diferente del conjunto de datos. Reciclar las vistas de esta manera mejora el rendimiento, ya que se evita que se creen vistas innecesarias o realicen búsquedas costosas de findViewById(). La biblioteca de compatibilidad de Android incluye tres administradores de diseño estándar, cada uno de los cuales ofrece muchas opciones de personalización:
LinearLayoutManager: Dispone los elementos en una lista unidimensional. Usar unRecyclerViewconLinearLayoutManagerofrece funciones como unListViewdiseño.GridLayoutManager: Dispone los elementos en una cuadrícula bidimensional, como los cuadrados de un tablero de ajedrez. Usar un objetoRecyclerViewconGridLayoutManagerofrece funciones como un diseño deGridView.StaggeredGridLayoutManager: dispone los elementos en una cuadrícula bidimensional, en la que cada columna está ligeramente desplazada en función de la anterior, como las estrellas de la bandera estadounidense.
Si estos administradores de diseño no se adecuan a tus necesidades, puedes crear uno propio extendiendo la clase abstracta RecyclerView.LayoutManager.
Agrega animaciones de elementos
Siempre que cambia un elemento, RecyclerView usa un animador para modificar su apariencia. Este animador es un objeto que extiende la clase abstracta RecyclerView.ItemAnimator. De forma predeterminada, RecyclerView usa DefaultItemAnimator para proporcionar la animación. Si quieres brindar animaciones personalizadas, puedes definir tu propio objeto animador extendiendo RecyclerView.ItemAnimator.
Habilita la selección de elementos de listas
La biblioteca permite a los usuarios seleccionar elementos en una lista RecyclerView con entrada táctil
o del mouse.recyclerview-selection Esto te permite mantener el control sobre la presentación visual de un elemento seleccionado. También puedes mantener el control sobre las políticas que controlan el comportamiento de selección, como qué elementos son aptos para la selección y cuántos elementos se pueden seleccionar.
Para agregar compatibilidad con la selección a una instancia de RecyclerView, sigue estos pasos:
- Determina el tipo de clave de selección que usarás y, luego, crea un
ItemKeyProvider.Hay tres tipos de claves que puedes usar para identificar elementos seleccionados:
Parcelabley sus subclases, comoUriStringLong
Para obtener información detallada sobre los tipos de claves de selección, consulta
SelectionTracker.Builder. - Implement
ItemDetailsLookup. - Actualiza los objetos
Viewdel elemento enRecyclerViewpara reflejar si el usuario los selecciona o anula su selección.La biblioteca de selección no proporciona una decoración visual predeterminada para los elementos seleccionados. Proporciónala cuando implementes
onBindViewHolder(). Te recomendamos el siguiente enfoque:- En
onBindViewHolder(), llama asetActivated()(y nosetSelected()) en el objetoViewcontrueofalse, según si el elemento está seleccionado. - Actualiza el estilo de la vista para representar el estado activado. Te recomendamos que uses un recurso de lista de estados con colores para configurar el estilo.
- En
- Usa
ActionModepara proporcionar al usuario herramientas para realizar una acción en la selección. - Realiza las acciones secundarias interpretadas.
- Ensambla todo con
SelectionTracker.Builder. - Incluye la selección en los eventos del ciclo de vida de la actividad.
ItemDetailsLookup permite que la biblioteca de selección acceda a información sobre elementos de RecyclerView a los que se otorga un MotionEvent.
Se trata efectivamente de una fábrica de instancias de ItemDetails que están respaldadas por una instancia de RecyclerView.ViewHolder, o que se extraen de ella.
Registra un objeto
SelectionTracker.SelectionObserver
para recibir una notificación cuando cambie una selección. Cuando se crea una selección por primera vez, inicia ActionMode para presentársela al usuario y proporciona acciones específicas de la selección. Por ejemplo, puedes agregar un botón de eliminación a la barra de ActionMode y conectar la flecha hacia atrás de la barra para borrar la selección. Cuando se vacía la selección (si el usuario borró la selección la última vez), finaliza el modo de acción.
Al final de la canalización del procesamiento de eventos, la biblioteca puede determinar
que el usuario intenta activar un elemento cuando lo presiona o que intenta arrastrar un elemento o conjunto de elementos seleccionados. Registra el objeto de escucha correspondiente como reacción a estas
interpretaciones. Para obtener más
información, consulta
SelectionTracker.Builder.
En el siguiente ejemplo, se muestra cómo unir estas partes:
Kotlin
var tracker = SelectionTracker.Builder( "my-selection-id", recyclerView, StableIdKeyProvider(recyclerView), MyDetailsLookup(recyclerView), StorageStrategy.createLongStorage()) .withOnItemActivatedListener(myItemActivatedListener) .build()
Java
SelectionTracker tracker = new SelectionTracker.Builder<>( "my-selection-id", recyclerView, new StableIdKeyProvider(recyclerView), new MyDetailsLookup(recyclerView), StorageStrategy.createLongStorage()) .withOnItemActivatedListener(myItemActivatedListener) .build();
Para crear una instancia de SelectionTracker, tu app debe proporcionar el mismo objeto RecyclerView.Adapter que usas para inicializar RecyclerView en SelectionTracker.Builder. Por este motivo, después de crear la instancia de SelectionTracker, insértala en tu RecyclerView.Adapter. De lo contrario, no podrás verificar el estado seleccionado de un elemento con el método onBindViewHolder().
Para preservar el estado de selección entre los eventos del ciclo de vida de la actividad, tu app debe llamar a los métodos onSaveInstanceState() y onRestoreInstanceState() del seguimiento de selección de los métodos onSaveInstanceState() y onRestoreInstanceState() de la actividad, respectivamente. Tu app también debe proporcionar un ID de selección único al constructor SelectionTracker.Builder. Este ID es obligatorio porque una actividad o un fragmento pueden tener más de una lista distinta para seleccionar, y todas deben persistir en su estado guardado.
Recursos adicionales
Consulta las siguientes referencias para obtener información adicional.
- App de demo de Sunflower, que usa
RecyclerView. - Codelab de Cómo usar RecyclerView para mostrar una lista desplazable
- Codelab de Conceptos básicos de Kotlin para Android: Aspectos básicos de RecyclerView