Как удалить несколько сущностей / объектов в комнате персистентности - PullRequest
0 голосов
/ 24 июня 2019

Я использую движение, чтобы удалить мои объекты, которые находятся внутри моего RecyclerView.Поэтому, если я проведу пальцем вправо, то сначала удаляю его из моего RecyclerView, после того как проведешь пальцем по экрану, пользователь должен нажать мою корзину, чтобы полностью удалить ее (также из базы данных).Все работает нормально, если я удаляю только 1, но если я проведу пальцем по большему количеству объектов, все исчезнет с моего экрана, как обычно, но моя база данных просто удалит последний.Я хочу, чтобы он удалял все объекты со свайпами.

Я искал другие ответы, но я могу найти только удалить все или один.Я думаю, что я должен держать свои объекты, а затем удалить все сразу при нажатии моей корзины.Просто не могу понять.

private void deletePerson(final oPerson person) {
     oPersonList.remove(person);
     personsAdapter.notifyDataSetChanged();

     Toast toast = Toast.makeText(getApplicationContext(), "Press the 
     trashcan for confirm.", Toast.LENGTH_LONG);
     toast.show();

     //DELETE A PERSON FOREVER DATABSE
     deletePersonIcon.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
             plannerRepository.deletePerson(person);
             Toast toast = Toast.makeText(getApplicationContext(), 
             "Deleted.", Toast.LENGTH_LONG);
             toast.show();
         }
     });
}

Так что я ожидаю, что первая часть будет такой же, oPersonList.remove ();работает отлично.Только вторая часть (после УДАЛИТЬ ЧЕЛОВЕКА) идет не так.Он удаляет последний объект, для которого был проведен обмен, и должен удалить все объекты, для которого был произведен обмен.

1 Ответ

1 голос
/ 24 июня 2019

Итак, вы должны создать что-то вроде этого

    private List itemsToDelete = new ArrayList<oPerson>();
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.view);

    //DELETE A PERSON FOREVER DATABSE
    deletePersonIcon.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            for(int i = 0; i < itemsToDelete.size(); ++i){
                oPerson personToDelete = itemsToDelete.get(i);
                plannerRepository.deletePerson(personToDelete);
            }
            itemsToDelete.clear();
        }
    });
}

private void deletePerson(final oPerson person) {
    itemsToDelete.add(person)
    oPersonList.remove(person);
    personsAdapter.notifyDataSetChanged();

    Toast toast = Toast.makeText(getApplicationContext(), "Press the trashcan for confirm.", Toast.LENGTH_LONG);
    toast.show();
}

Как видите, прослушиватель кликов должен быть добавлен только один раз, затем мы просто итерируем по itemsToDelete, в котором хранятся элементы, которые были заменены. Далее список очищается.

...