у меня есть:
- таблица для моей сущности,
obj
.
- класс (модель),
Obj
.
- a Room Entity,
ObjEntity
.
- а Комната DAO,
ObjDao
.
- и, наконец, RecyclerView для моей модели,
Obj
.
В моем классе Obj
я добавил метод вставки - Obj#Post
, который обрабатывает сохранение этого Obj
в базе данных приложения (обрабатывает преобразование в ObjEntity
, внешние ключи для дочерних сущностей / списков и т. Д. .)
Первая мысль - запросить таблицу obj
для всех obj
с, перед тем как взять ObjEntity[]
, сопоставить ее с Obj[]
перед обновлением (кэшированной) в памяти версии всех obj
с. - и уведомление адаптера представления переработчика об обновлении.
Это, очевидно, не самый лучший подход, так как он обновляет только вставку, а не удаление и т. Д. Это также не следует схеме разделения проблем.
В идеале я хочу, чтобы RecyclerView динамически запрашивал у самой базы данных и обновлял соответственно. Однако реализация адаптера работает на основе упорядоченной структуры списка. Теперь у objs
не всегда будут смежные id
с - поэтому, если бы я не сделал какой-то фанк-хак, чтобы сопоставить значение, возвращаемое RecyclerView.Adapter#getItemCount
с каждым идентификатором, это не похоже, что это сработает. Также, самое главное, нет уведомлений об изменениях адаптера с этим решением. Это будет просто запрос, когда это обычно происходит - я не знаю реализацию, я предполагаю некоторую форму опроса или триггер взаимодействия с пользователем.
Есть ли у Room какая-либо форма API обратного вызова, то есть ObjDao#onTableUpdated
?