Как обрабатывать недействительный RealmList в RecyclerView - PullRequest
0 голосов
/ 28 мая 2020
Приложение

My Android использует RecyclerView для отображения управляемого RealmList, содержащегося в RealmObject. Если RealmObject удален, я получаю следующую ошибку:

java.lang.IllegalStateException: Access to invalidated List object

Ошибка возникает в этом разделе адаптера (который расширяет RecyclerView.Adapter):

        @Override
        public int getItemCount() {
            if (mEventList != null) {
                return mEventList.size(); //Error occurs here
            } else {
                return 0;
            }
        }

        EventListAdapter(RealmList<TodoItem> todoItems, int colorGroup, OnStartDragListener dragStartListener) {
            this.mEventList = todoItems;
            this.colorGroup = colorGroup;
            this.mDragStartListener = dragStartListener;
        }

Это происходит вместе со следующим кодом для удаления RealmObject, содержащего RealmList. Ошибка возникает до того, как Activity закрывается, и информация возвращается его родительскому Activity

   case R.id.navigation_delete:
        deleteGroup();
        sendIntentInfoBack(Constants.RESULT_CHANGED, createIntentBundle());
        return true;
    private void deleteGroup() {
        mRealm.executeTransaction(realm -> {
            RealmList<TodoItem> eventsToDelete = mCurrentTodoList.getTodos();
            eventsToDelete.deleteAllFromRealm();
            RealmResults<TodoList> noteToDelete = mRealm.where(TodoList.class).equalTo(TodoList.PK, mCurrentTodoList.getPK()).findAll();
            noteToDelete.deleteAllFromRealm();
        });
    }

Пользователь должен иметь возможность удалить RealmObject, содержащий RealmList.

Мои вопросы:

Как мне обработать аннулирование RealmList? Я пробовал назначить источник данных RecyclerView как null, затем выполняя notifyDataSetChanged() на адаптере перед удалением RealmObject, но получаю ту же ошибку.
Могу ли я отключить RecyclerView? Если да, то как?
Могу ли я создать пустой или выброшенный RealmList, а затем назначить новый адаптер RecyclerView с этим в качестве источника данных, затем удалите RealmObject?
Могу ли я закрыть Activity, содержащий RecyclerView, и просто обработать удаление RealmObject в родительском Activity?

Спасибо за внимание и время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...