RecyclerView добавляет нежелательный элемент при удалении

У меня проблема при удалении элемента из RecyclerView (связанного с базой данных SQLite). После успешного удаления элемента отображается анимация, а затем элемент снова появляется внизу (тоже с причудливой анимацией). Когда я проверяю базу данных, она фактически удаляет строку.

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

Вот мой код:

Метод адаптера:

public void removeItem(int position){
        db = new DBAdapter(context);
        db.open();
        mCursorAdapter.getCursor().moveToPosition(position);
        int idnota = mCursorAdapter.getCursor().getInt(0);
        db.borra_nota(idnota); //it deletes the row (delete_note)
        db.close();
    }

Внутри моей основной деятельности:

        public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {

            //if (direction == ItemTouchHelper.LEFT) {
            listAdapter.removeItem(position);
            listAdapter.notifyItemRangeChanged(position, listAdapter.getItemCount());
            listAdapter.notifyItemRemoved(position);

Мое первоначальное решение (но без анимации) выглядело так:

        public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
            int position = viewHolder.getAdapterPosition();
            sticky = (RecyclerView) findViewById(R.id.lista_notas);
            linearLayoutManager = new LinearLayoutManager(MainActivity.this);
            sticky.setLayoutManager(linearLayoutManager);

            listAdapter = new ListAdapter(MainActivity.this);
            sticky.setAdapter(listAdapter);


Конечно, помещая "removeItem" и так далее в метод удаления адаптера.

Любая идея о том, как показать анимацию, предотвращающую отображение в списке нового и фактически несуществующего элемента?

Благодарю вас!


person dragonkhanrider    schedule 27.01.2017    source источник


Ответы (1)


Хорошо, решено!

Проблема заключалась в том, что я удалял строку, а не CursorAdapter.

Метод в моем ListAdapter, который теперь работает, выглядит так:

    public void removeItem(int position){
        db = new DBAdapter(context);
        db.open();
        mCursorAdapter.getCursor().moveToPosition(position);
        int idnota = mCursorAdapter.getCursor().getInt(0);
        db.borra_nota(idnota); //it deletes the row (delete_note)

        items = db.consulta_todos(); //select all from db again
        mCursorAdapter.changeCursor(items);
    }

Привет!

person dragonkhanrider    schedule 27.01.2017