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

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

我关注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不会刷新。这个fragment我在TabLayoutfavouriteBooks只有当我再次点击另一个标签时才会刷新。不知道怎么解决这个问题?这是非常简单的代码,我相信LiveData应该支持这种更新本身,我相信这是为了首先创建LiveData。谢谢你的帮助。

编辑:移动观察员从onCreateViewonViewCreated没有任何区别。

android android-adapter android-livedata
1个回答
0
投票

我找到了解决方案。在setBooksAdapter方法中,我需要打电话给notifyDataSetChanged();。这样,每次收集更改时,列表都会正确刷新。

public void setBooks(List<Book> books) {
    this.books = books;
    notifyDataSetChanged();
}
© www.soinside.com 2019 - 2024. All rights reserved.