我关注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
我在TabLayout
,favouriteBooks
只有当我再次点击另一个标签时才会刷新。不知道怎么解决这个问题?这是非常简单的代码,我相信LiveData
应该支持这种更新本身,我相信这是为了首先创建LiveData
。谢谢你的帮助。
编辑:移动观察员从onCreateView
到onViewCreated
没有任何区别。
我找到了解决方案。在setBooks
的Adapter
方法中,我需要打电话给notifyDataSetChanged();
。这样,每次收集更改时,列表都会正确刷新。
public void setBooks(List<Book> books) {
this.books = books;
notifyDataSetChanged();
}