我有以下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
没有任何作用。
答案 0 :(得分:0)
我找到了解决方案。在setBooks
的{{1}}方法中,我需要调用Adapter
。这样,每次更改集合时,列表都会正确刷新。
notifyDataSetChanged();