LiveData не обновляется при изменении объектов в базе данных - PullRequest
0 голосов
/ 16 апреля 2019

У меня есть следующее 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 не имеет никакого значения.

1 Ответ

0 голосов
/ 30 апреля 2019

Я нашел решение.В setBooks методе Adapter мне нужно вызвать notifyDataSetChanged();.При этом список обновляется должным образом при каждом изменении коллекции.

public void setBooks(List<Book> books) {
    this.books = books;
    notifyDataSetChanged();
}
...