SQLite
 sql >> Base de Dados >  >> RDS >> SQLite

Armazenar a nova posição dos itens do RecyclerView no SQLite após serem arrastados e soltos


Você precisa de um campo em cada linha do banco de dados para armazenar o pedido. Então, você precisa implementar esses recursos:

  • Na inserção de nova linha (quando você insere um novo objeto no banco de dados), você precisa definir a ordem campo para o próximo int. Você pode obter o valor máximo atual (com a função sql MAX ) e então simplesmente faça +1

  • Quando o usuário move um item em RecyclerView , no método onMoved você deve atualizar todas as outras linhas. Você pode usar o fromPos e toPos por isso. Mais sobre isso abaixo

  • Quando você preenche seu RecyclerView com dados você precisa ordená-los por order campo


Explicação do 2º recurso a ser implementado:basicamente você precisa atualizar todas as linhas com ordem entre fromPos e toPos :

  • se o usuário moveu o item para cima (por exemplo, da posição 4 para 2), você precisa:
    1. obtenha o campo de chave primária do item atual (usando a posição 4)
    2. alterar todas as linhas entre o pedido 2 e peça 4 :então mude 2 -> 3 e 3 -> 4
    3. Alterar a ordem atual do item (usando a chave primária do primeiro ponto) para toPos :neste exemplo, altere a ordem do item atual para 2

  • se o usuário moveu o item para baixo (por exemplo, da posição 2 para a 4), você precisa:
    1. obter o campo de chave primária do item atual (usando a posição 2)
    2. altere todas as linhas entre a ordem 2 e a ordem 4:altere 4 -> 3 e 3 -> 2
    3. alterar a ordem do item atual (usando a chave primária do primeiro ponto) para toPos :neste exemplo, altere a ordem do item atual para 4


Espero ter ajudado um pouco