修改从 Room 获取的 LiveData 项目
Modify LiveData item fetched from Room
我有简单的 RecyclerView
,我用 LiveData
.
填充
Activity:
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
。
一种(不好的)解决方案是将应用程序发送到适配器,我将在其中创建存储库并更新 Book 实体 "manually"。但我知道将 Application
发送到 adapter
不是一个好主意。
知道怎么做吗?我只需要在 Book 实体中设置一个简单的 boolean
列。谢谢。
更新实时数据集中的值不会更新基础源。我建议将您的 DAO 更新到用户单击 LIKE 按钮时的位置,它会更新数据库..然后 post 更新您的实时数据,并且更改将反映在视图中。
例如:
@Query("UPDATE books SET FAVOURITE = :value WHERE books.bookId = :bookId")
public abstract void setBookFavourited(boolean value, int bookId);
还要注意,您不需要将应用程序传递给适配器。在适配器中设置一个界面,告诉 activity 用户按下了收藏夹按钮。
在适配器中:
public interface BookFavoriteListener {
void onBookFavorited(Book book);
}
在您的 activity 中实现接口,然后将 'this' 传递给适配器的构造函数以设置侦听器。
我有简单的 RecyclerView
,我用 LiveData
.
Activity:
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
。
一种(不好的)解决方案是将应用程序发送到适配器,我将在其中创建存储库并更新 Book 实体 "manually"。但我知道将 Application
发送到 adapter
不是一个好主意。
知道怎么做吗?我只需要在 Book 实体中设置一个简单的 boolean
列。谢谢。
更新实时数据集中的值不会更新基础源。我建议将您的 DAO 更新到用户单击 LIKE 按钮时的位置,它会更新数据库..然后 post 更新您的实时数据,并且更改将反映在视图中。
例如:
@Query("UPDATE books SET FAVOURITE = :value WHERE books.bookId = :bookId")
public abstract void setBookFavourited(boolean value, int bookId);
还要注意,您不需要将应用程序传递给适配器。在适配器中设置一个界面,告诉 activity 用户按下了收藏夹按钮。
在适配器中:
public interface BookFavoriteListener {
void onBookFavorited(Book book);
}
在您的 activity 中实现接口,然后将 'this' 传递给适配器的构造函数以设置侦听器。