Я пишу приложение todo, чтобы узнать больше об архитектуре Android. Я реализовал RecyclerView с адаптером, который получает данные от ViewModel . Теперь я пытаюсь реализовать удаление с помощью кнопки «Отменить» на панели Snackbar.
Все работает нормально, пока не пытаюсь удалить 2 элемента из RecyclerView одновременно. Только один элемент удален, второй появляется снова. Проблема существует только тогда, когда закусочная не закрыта. Я использую
Snackbar.Callback.DISMISS_EVENT_ACTION
для обработки, когда пользователь нажимает кнопку отмены на снэк-баре
class FolderFragment
...
adapter = new FolderListAdapter(getContext(), folderViewModel);
folderViewModel.getFolders().observe(this, adapter::setFolders);
...
public void onSwipe() {
Snackbar.make(getView(),
R.string.folder_removed_message, Snackbar.LENGTH_SHORT)
.setAction(R.string.undo, v ->
adapter.undoDelete())
.addCallback(new Snackbar.Callback() {
@Override
public void onDismissed(Snackbar transientBottomBar, int event) {
if (event != Snackbar.Callback.DISMISS_EVENT_ACTION) {
folderViewModel.delete(adapter.getDeletedFolder());
}
}
})
.show();
public class FolderListAdapter extends RecyclerView.Adapter<FolderListAdapter.FolderViewHolder>
...
void setFolders(List<Folder> folders) {
this.folders = folders;
notifyDataSetChanged();
}
public void onItemDismiss(int position) {
mDeletedPosition = position;
mDeletedFolder = folders.get(position);
folders.remove(position);
notifyItemRemoved(position);
}
public void undoDelete() {
folders.add(mDeletedPosition, mDeletedFolder);
notifyItemInserted(mDeletedPosition);
}
...
public class FolderViewModel extends AndroidViewModel
...
public void delete(Folder folder) {
folderRepository.delete(folder);
}
...
См. Поведение моего адаптера RecyclerView по ссылке ниже поведение
пытается комментировать строки в адаптере, который удаляет элемент из списка в адаптере - не работает
ведение журнала setList () в адаптере - viewmodel не обновляет LiveData, потому что он работает в фоновом режиме, но я не знаю, как это сделатьрешить этот
проект на github