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

时间:2019-04-16 10:16:09

标签: android android-adapter android-livedata

我有以下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首先创建的。感谢您的帮助。

编辑:将观察者从onCreateView移到onViewCreated没有任何作用。

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。在setBooks的{​​{1}}方法中,我需要调用Adapter。这样,每次更改集合时,列表都会正确刷新。

notifyDataSetChanged();