数据库中的对象更改时 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
中的fragment
和favouriteBooks
只有在我再次点击另一个选项卡时才会刷新。知道如何解决这个问题吗?这是非常简单的代码,我相信 LiveData
应该在自身之外支持这种更新,我相信这是为了 LiveData
首先创建的。感谢您的帮助。
编辑:将观察者从 onCreateView
移动到 onViewCreated
没有任何区别。
我找到了解决方案。在Adapter
的setBooks
方法中,我需要调用notifyDataSetChanged();
。这样,每次集合更改时列表都会正确刷新。
public void setBooks(List<Book> books) {
this.books = books;
notifyDataSetChanged();
}
我关注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
中的fragment
和favouriteBooks
只有在我再次点击另一个选项卡时才会刷新。知道如何解决这个问题吗?这是非常简单的代码,我相信 LiveData
应该在自身之外支持这种更新,我相信这是为了 LiveData
首先创建的。感谢您的帮助。
编辑:将观察者从 onCreateView
移动到 onViewCreated
没有任何区别。
我找到了解决方案。在Adapter
的setBooks
方法中,我需要调用notifyDataSetChanged();
。这样,每次集合更改时列表都会正确刷新。
public void setBooks(List<Book> books) {
this.books = books;
notifyDataSetChanged();
}