Ich verwende die neue Auslagerungsbibliothek für meine Daten. Alles funktioniert gut, wenn das ViewModel erstellt wird und Live-Daten zuerst initialisiert werden. Problem ist, dass ich den Wert meiner Live-Daten nicht aktualisieren kann, wenn ich beispielsweise auf Menüpunkt klicke und diese mit einem anderen Datensatz aktualisieren möchte. Dann wird onChanged-Methode in meinem Fragment nicht aufgerufen. Ich habe über MutableLiveData und Methoden wie setValue und postValue gelesen, die die Live-Daten aktualisieren können, aber in meinem Fall verwende ich LivePagedListProvider und kann MutableLiveData nicht aus einer Datenbank zurückgeben.Wie LiveData-Wert zu aktualisieren?
Dao:
@Query("SELECT * FROM teams ORDER BY name ASC")
LivePagedListProvider<Integer, Team> getAllTeams();
Fragment:
mTeamViewModel.mTeamsList.observe(this, new Observer<PagedList<Team>>() {
@Override
public void onChanged(@Nullable PagedList<Team> teams) {
mTeamAdapter.setList(teams);
}
});
Ansichtsmodell:
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;
}
}
@Update annotierte Methode macht einen Trick (oder Einfügen oder Löschen) – pskink
Meinen Sie, etwas in meiner Tabelle zu aktualisieren, einzufügen oder zu löschen, damit es onChanged auslöst? Das könnte funktionieren, aber was soll ich aktualisieren? – tomas
Sie sollten den Datensatz, den Sie ändern möchten, aktualisieren, aber für Lernzwecke einfach neuen Datensatz einfügen - es ist viel einfacher – pskink