数据库中的对象更改时 LiveData 不更新

LiveData not updating when objects in database change

我关注fragment:

public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_favourite_books, container, false);
    ...
    getActivity().getFavouriteBooks().observe(this, books -> booksAdapter.setBooks(books));
    return view;
}

我的Activity:

public LiveData<List<Book>> getFavouriteBooks() {
    return viewModel.getFavouriteBooks();
}  

我的ViewModel(书籍是从数据库中获取的):

LiveData<List<Book>> favouriteBooks;

public MainViewModel(@NonNull Application application) {
    super(application);
    favouriteBooks = booksRepository.getFavouriteBooks();
}

public LiveData<List<Book>> getFavouriteBooks() {
    return favouriteBooks;
}

问题: 当我在此功能之外更改 favourite 标志时(例如,在另一个 fragment 中),适配器中的 favouriteBooks 不会刷新。我在TabLayout中的fragmentfavouriteBooks只有在我再次点击另一个选项卡时才会刷新。知道如何解决这个问题吗?这是非常简单的代码,我相信 LiveData 应该在自身之外支持这种更新,我相信这是为了 LiveData 首先创建的。感谢您的帮助。

编辑:将观察者从 onCreateView 移动到 onViewCreated 没有任何区别。

我找到了解决方案。在AdaptersetBooks方法中,我需要调用notifyDataSetChanged();。这样,每次集合更改时列表都会正确刷新。

public void setBooks(List<Book> books) {
    this.books = books;
    notifyDataSetChanged();
}