Cómo personalizar una lista dinámica Parte de Android Jetpack

Prueba el método de Compose
Jetpack Compose es el kit de herramientas de IU recomendado para Android. Obtén información para trabajar con diseños en Compose.

Puedes personalizar los objetos RecyclerView para satisfacer tus necesidades específicas. Las clases estándar que se describen en Cómo crear listas dinámicas con RecyclerView proporcionan todas las funciones que necesita la mayoría de los desarrolladores. En muchos casos, solo necesitas diseñar la vista para cada contenedor de vistas y escribir el código para actualizar esas vistas con los datos adecuados. Sin embargo, si tu app tiene requisitos específicos, puedes modificar el comportamiento estándar de varias maneras. En este documento, se describen algunas de las posibles personalizaciones.

Cómo modificar 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 son visibles para el usuario. Para reutilizar (o reciclar) una vista, un administrador de diseño puede solicitar al adaptador que reemplace el contenido de la vista con un elemento diferente del conjunto de datos. De esta manera, cuando se reciclan las vistas, se mejora el rendimiento, ya que se evita la creación de vistas innecesarias o la realización de 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: organiza los elementos en una lista unidimensional. Usar un RecyclerView con LinearLayoutManager ofrece una funcionalidad como un diseño ListView.
  • GridLayoutManager: organiza los elementos en una cuadrícula bidimensional, como los cuadrados de una tabla de ajedrez. Usar un objeto RecyclerView con GridLayoutManager ofrece funciones como un diseño GridView.
  • StaggeredGridLayoutManager: organiza los elementos en una cuadrícula bidimensional, en la que cada columna está ligeramente desplazada con respecto a la anterior, como las estrellas de la bandera estadounidense.

Si estos administradores de diseño no satisfacen tus necesidades, puedes crear uno propio si extiendes la clase abstracta RecyclerView.LayoutManager.

Cómo agregar animaciones de elementos

Cada vez que cambia un elemento, RecyclerView usa un animador para cambiar 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 proporcionar animaciones personalizadas, puedes definir tu propio objeto animador extendiendo RecyclerView.ItemAnimator.

Cómo habilitar la selección de elementos de listas

La biblioteca de recyclerview-selection permite a los usuarios seleccionar elementos en una lista de RecyclerView con una entrada táctil o del mouse. Esto te permite conservar 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 seleccionarse y cuántos se pueden seleccionar.

Para agregar compatibilidad de selección a una instancia de RecyclerView, sigue estos pasos:

  1. Determina qué tipo de clave de selección usar y, luego, crea una ItemKeyProvider.

    Existen tres tipos clave que puedes usar para identificar elementos seleccionados:

    Para obtener información detallada sobre los tipos de claves de selección, consulta SelectionTracker.Builder.

  2. Implementa ItemDetailsLookup.
  3. ItemDetailsLookup permite que la biblioteca de selección acceda a información sobre elementos RecyclerView a partir de un MotionEvent. En efecto, es una fábrica para instancias de ItemDetails que están respaldadas por una instancia RecyclerView.ViewHolder o se extraen de ella.

  4. Actualiza los objetos View de los elementos en RecyclerView para indicar si el usuario los selecciona o anula la selección.

    La biblioteca de selección no proporciona una decoración visual predeterminada para los elementos seleccionados. Proporciona esto cuando implementes onBindViewHolder(). Recomendamos el siguiente enfoque:

  5. Usa ActionMode a fin de proporcionar al usuario las herramientas para realizar una acción en la selección.
  6. Registra un 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 proporcionar acciones específicas de la selección. Por ejemplo, puedes agregar un botón de borrar a la barra ActionMode y conectar la flecha hacia atrás de la barra para borrar la selección. Cuando la selección se vacía, si el usuario borra la selección la última vez, finaliza el modo de acción.

  7. Realizar acciones secundarias interpretadas
  8. Al final de la canalización del procesamiento de eventos, la biblioteca puede determinar que el usuario está intentando activar un elemento, si lo presiona o si 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.

  9. Reúne todo con SelectionTracker.Builder.
  10. En el siguiente ejemplo, se muestra cómo reunir todo esto:

    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 compilar una instancia de SelectionTracker, tu app debe proporcionar el mismo RecyclerView.Adapter que usas para inicializar RecyclerView en SelectionTracker.Builder. Por este motivo, después de crear la instancia de SelectionTracker, insértala en el RecyclerView.Adapter. De lo contrario, no puedes verificar el estado seleccionado de un elemento desde el método onBindViewHolder().

  11. Incluye la selección en los eventos del ciclo de vida de la actividad.
  12. Para preservar el estado de selección en 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 desde 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 necesario porque una actividad o un fragmento pueden tener más de una lista distinta que se puede seleccionar, y todas deben conservarse en su estado guardado.

Recursos adicionales

Consulta las siguientes referencias para obtener más información.