修改从Room获取的LiveData项

问题描述 投票:1回答:1

我有简单的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 android-recyclerview android-room android-livedata
1个回答
1
投票

更新livingata集中的值不会更新基础源。我建议将DAO更新到用户单击LIKE按钮的位置,它会更新DB..which然后将更新发布到您的livingata,更改将反映在视图上。

例如:

@Query("UPDATE books SET FAVOURITE = :value WHERE books.bookId = :bookId")
public abstract void setBookFavourited(boolean value, int bookId);

另外需要注意的是,您不需要将Application传递给适配器。在适配器中设置一个接口,告诉活动用户按下了收藏夹按钮。

适配器:

public interface BookFavoriteListener {
    void onBookFavorited(Book book);
}

在您的活动中实现接口,然后将“this”传递给适配器的构造函数以设置监听器。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.