【发布时间】:2019-04-04 16:02:25
【问题描述】:
我有简单的RecyclerView,我用LiveData填充。
活动:
viewModel.getBooks().observe(this, books -> booksAdapter.setBooks(books));
视图模型:
public LiveData<List<Book>> getBooks() {
books = booksRepository.getBooks();
return books;
}
BooksRepository 只是调用了这个DAO 的方法:
@Query("SELECT * FROM books")
LiveData<List<Book>> getBooks();
一切都按预期进行。但是,在RecyclerView 中,每个项目都有LIKE 按钮,并且我想创建onClick 侦听器,它会相应地更改书的标志FAVOURITE。但是,Room 不支持 LiveData,也不支持 MutableLiveData。
一种(不好的)解决方案是将 Application 发送到适配器,在那里我将创建存储库并“手动”更新 Book 实体。但我知道将Application 发送到adapter 不是一个好主意。
知道怎么做吗?我只需要在 Book 实体中设置一个简单的boolean 列。谢谢。
【问题讨论】:
-
你使用 Android 的 ListAdapter (developer.android.com/reference/android/widget/ListAdapter) 吗?您应该这样做,或者尝试从适配器的
setBooks()中调用notifyDataSetChanged()。
标签: android android-recyclerview android-room android-livedata