私は自分のデータに新しいページングライブラリを使用しています。 ViewModelが作成され、ライブデータが最初に初期化されると、すべて正常に動作します。問題は、たとえば、メニュー項目をクリックして、別のデータセットで更新する場合、私のライブデータの値を更新できないということです。私の断片のonChangedメソッドは呼び出されません。私はMutableLiveDataと、ライブデータを更新できるsetValueやpostValueのようなメソッドについて読んでいますが、私の場合、LivePagedListProviderを使用していて、データベースからMutableLiveDataを返すことはできません。LiveDataの値を更新するには?
ダオ:
@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;
}
}
@Update注釈付きメソッドは、トリック(または挿入または削除)を行います – pskink
あなたのテーブル内の何かを更新、挿入、または削除してonChangedをトリガーするのですか?それはうまくいくかもしれませんが、私は何を更新すべきですか? – tomas
変更したいレコードを更新する必要がありますが、学習目的のために新しいレコードを挿入するだけです。 – pskink