danilochagov
@danilochagov

Удаляет не все элементы из TODO List приложения на андроид?

Делаю TODO лист и возникла проблема, когда нажимаешь на кнопку Select all, то элементы все выделаются, но когда после этого нажимаешь Delete selected, то остаётся 1 элемент. Но если всего имеешь только 1 таск, то всё удалится. В чём проблема никак не пойму?

рис1 до добавления элементов, рис2 после добавления, рис3 когда нажал кнопку выделить всё и кнопку удалить выделенные

checkForEmptyTask() только проверяет if (taskAdapter.getItemCount == 0) то выводит текст что тасков еще нету
------------------------------------------------------------------------------
TaskAdapter
public void selectAllElements () {
        for (int i = 0; i < listCheckBoxChecked.size(); i++) {
            listCheckBoxChecked.set(i, true);
        }
        notifyDataSetChanged();
    }

    public void removeSelected () {
        for (int i = 0; i < listCheckBoxChecked.size(); i++) {
            if (listCheckBoxChecked.get(i)) {
                listTasks.remove(i);
                listDate.remove(i);
                listCheckBoxChecked.remove(i);
            }
        }
        notifyDataSetChanged();
    }

--------------------------------------------
public class TaskAdapter extends RecyclerView.Adapter<TaskAdapter.ViewHolder> {
    private List<String> listTasks = new ArrayList<>(); // хранит таски
    private List<String> listDate = new ArrayList<>(); // хранит дату тасков
    private List<Boolean> listCheckBoxChecked = new ArrayList<>(); // хранит значение чекбокса(по дефолту он false)

----------------------------------------------
MainActivity
btn_sel_all.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick (View v) {
                if (taskAdapter.getItemCount() == 0) {
                    showWrongDialog("No elements that you can select!");
                } else {
                    taskAdapter.selectAllElements();
                }
            }
        });
        btn_del_sel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick (View v) {
                taskAdapter.removeSelected();
                checkForEmptyTasks();
                showSuccessfullyDialog();
            }
        });

--------------------------------------
5b7286a15d423581002941.png5b7286a637df3503765194.png5b7286a9d8840846831119.png
  • Вопрос задан
  • 130 просмотров
Решения вопроса 2
zagayevskiy
@zagayevskiy Куратор тега Java
Android developer at Yandex
for (int i = 0; i < listCheckBoxChecked.size(); i++) {
            if (listCheckBoxChecked.get(i)) {
                listTasks.remove(i);
                listDate.remove(i);
                listCheckBoxChecked.remove(i);
            }
        }

Здесь ошибка. Удалять всегда нужно с конца. Иначе ты пропускаешь элементы.
Ответ написан
Комментировать
KuSu
@KuSu
Android разработчик
public void removeSelected () {
        for (int i = 0; i < listCheckBoxChecked.size(); i++) {
            if (listCheckBoxChecked.get(i)) {
                listTasks.remove(i);
                listDate.remove(i);
                listCheckBoxChecked.remove(i);
            }
        }
        notifyDataSetChanged();
    }

Вот мне в упор не нравится этот метод. Смотри, у тебя список 1 2 3. Ты удаляешь элемент по индексу [0], получаешь список 23. Следующим ты удаляешь элемент по индексу [1] - получаешь список из числа 2. Теперь i = 2, size =1 -> выход из цикла
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы