Save position in room database after drag and drops item touch helper

Viewed 269

Can't find a solution how can I save the position in room after the change?

@Query("SELECT * FROM notes WHERE id == :id")
Note getNoteId(int id);

@Insert(onConflict = OnConflictStrategy.REPLACE)
void insertNote(Note note);

@Update
void update(Note note);

...

MainViewModel viewModel = new ViewModelProvider(this).get(MainViewModel.class);
    viewModel.getNotes().observe(this, notes -> {
        notesFromDB = new ArrayList<>(notes);

... Tried it doesn't work

private final ItemTouchHelper.SimpleCallback simpleCallback =
        new ItemTouchHelper.SimpleCallback(ItemTouchHelper.UP | ItemTouchHelper.DOWN |
                ItemTouchHelper.RIGHT | ItemTouchHelper.LEFT, ItemTouchHelper.RIGHT | ItemTouchHelper.LEFT) {
            @Override
            public boolean onMove(@NonNull RecyclerView recyclerView,
                                  @NonNull RecyclerView.ViewHolder viewHolder,
                                  @NonNull RecyclerView.ViewHolder target) {
                Note note = notesAdapter.getNoteAt(viewHolder.getAdapterPosition());
                Collections.swap(notesFromDB, viewHolder.getAdapterPosition(), target.getAdapterPosition());
                recyclerView.getAdapter().notifyItemMoved(viewHolder.getAdapterPosition(), target.getAdapterPosition());
                App.getInstance().getNoteDao().update(note);
                return true;
            }
0 Answers
Related