У меня есть RecyclerView
, который отображает элементы из базы данных Realm
. Для этого я реализовал RealmRecyclerViewAdapter
на основе адаптеров realm-android, который получает OrderedRealmCollection
передано. Для этого я загружаю данные с помощью findAllAsync()
realm.where(Entry.class).findAllAsync()
Когда пользователь прокручивает список, у него есть возможность добавить некоторые записи в избранное, что я реализовал с помощью обычного OnClickListener
на кнопке «Избранное».
Теперь я хотел бы обновить «любимое» логическое значение записи всякий раз, когда пользователь нажимает кнопку. После нажатия пользователем на кнопке отображается небольшая анимация.
Для этого я попробовал следующее, что, к сожалению, дает неправильное исключение потока:
realm.executeTransactionAsync(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
entry.setLiked(!entry.isLiked());
}
});
В качестве альтернативы я попробовал это с обычным executeTransaction
, который будет работать, но анимация не будет отображаться.
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
entry.setLiked(!entry.isLiked());
}
});
В качестве интересного дополнения это дает следующий журнал:
Следует избегать смешивания асинхронных запросов с локальными операциями записи. Realm преобразует любые асинхронные запросы в синхронные, чтобы оставаться согласованными. Вместо этого используйте асинхронную запись.
Есть ли возможность полностью асинхронно обновить элемент без задержки или предотвращения отображения анимации?