sql >> Base de Datos >  >> RDS >> SQLite

Almacene la nueva posición de los elementos de RecyclerView en SQLite después de arrastrarlos y soltarlos

Necesita un campo en cada fila de la base de datos para almacenar el pedido. Luego, debe implementar esas características:

  • En la inserción de una nueva fila (cuando inserta un nuevo objeto en la base de datos), debe establecer el orden campo al siguiente int. Puede obtener el valor máximo actual (con la función sql MAX ) y luego simplemente haz +1

  • Cuando el usuario mueve un elemento en RecyclerView , en el método onMoved debe actualizar todas las demás filas. Puedes usar el fromPos y toPos para eso. Más sobre eso a continuación

  • Cuando llenas tu RecyclerView con datos necesitas ordenarlos por order campo


Explicación de la segunda función que se implementará:básicamente, debe actualizar todas las filas con orden entre fromPos y toPos :

  • si el usuario movió el elemento hacia arriba (por ejemplo, de la posición 4 a la 2), debe:

    1. obtener el campo de clave principal del elemento actual (usando la posición 4)
    2. cambiar todas las filas entre el orden 2 y pedir 4 :entonces cambia 2 -> 3 y 3 -> 4
    3. Cambiar el orden de los artículos actuales (usando la clave principal del primer punto) a toPos :en este ejemplo, cambie el orden actual de los elementos a 2
  • si el usuario movió el elemento hacia abajo (por ejemplo, de la posición 2 a la 4), debe:

    1. obtener el campo de clave principal del elemento actual (usando la posición 2)
    2. cambie todas las filas entre el orden 2 y el orden 4:cambie 4 -> 3 y 3 -> 2
    3. cambiar el orden de los artículos actuales (usando la clave principal del primer punto) a toPos :en este ejemplo, cambie el orden actual de los artículos a 4


Espero que te ayude un poco