Я использую новую библиотеку подкачки для своих данных. Все работает нормально, когда ViewModel создается и сначала инициализируются данные в реальном времени. Проблема в том, что я не могу обновить значение моих данных в реальном времени, когда, например, я нажимаю пункт меню и хочу обновить его другим набором данных. Тогда метод onChanged в моем фрагменте не вызывается. Я читал о MutableLiveData и таких методах, как setValue и postValue, которые могут обновлять данные в реальном времени, но в моем случае я использую LivePagedListProvider и не могу вернуть MutableLiveData из базы данных.
Дао:
@Query("SELECT * FROM teams ORDER BY name ASC")
LivePagedListProvider<Integer, Team> getAllTeams();
Фрагмент:
mTeamViewModel.mTeamsList.observe(this, new Observer<PagedList<Team>>() {
@Override
public void onChanged(@Nullable PagedList<Team> teams) {
mTeamAdapter.setList(teams);
}
});
ViewModel:
public LiveData<PagedList<Team>> mTeamsList;
@Inject
DatabaseManager mDatabaseManager;
void setTeamViewModel(final DatabaseManager databaseManager) {
mDatabaseManager = databaseManager;
mTeamsList = mDatabaseManager.getAllTeams().create(
0,
new PagedList.Config.Builder()
.setPageSize(50)
.setPrefetchDistance(50)
.setEnablePlaceholders(true)
.build());
}
boolean onOptionsItemSelected(final MenuItem item) {
switch (item.getItemId()) {
case R.id.action_favorite:
mTeamsList = mDatabaseManager.getFavoriteTeams().create(
0,
new PagedList.Config.Builder()
.setPageSize(50)
.setPrefetchDistance(50)
.build());
return true;
default: return false;
}
}