2

私は自分のデータに新しいページングライブラリを使用しています。 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; 
    } 
} 
+0

@Update注釈付きメソッドは、トリック(または挿入または削除)を行います – pskink

+0

あなたのテーブル内の何かを更新、挿入、または削除してonChangedをトリガーするのですか?それはうまくいくかもしれませんが、私は何を更新すべきですか? – tomas

+0

変更したいレコードを更新する必要がありますが、学習目的のために新しいレコードを挿入するだけです。 – pskink

答えて

1

モデルでisFavourite列を作成します。その後:

@Query("SELECT * FROM teams WHERE isFavourite = true") 
LivePagedListProvider<Integer, Team> getFavouriteTeams(); 

次にあなたがMutableLiveData<PagedList<Team>>を返し、Fragment/Activityにあなたがそのフィールドに観察機能/フィールドでViewModelを持っている必要があります。 Fragment/Activityには、表示されるべき変更があるたびにViewModelと伝えられます。次に、ViewModelでは、ライブデータリストに異なる値を割り当てます。

+0

しかし、私はただ2つのリストを表示したくありません。実際、カテゴリに基づいてリストを表示する5つのオプションがあります。だから私はそれらのそれぞれのためのアダプタを作成することが最良の選択肢ではないと思う。代わりに私のために働くものは、ちょうど異なる観察者を使用していますが、アダプタ1つです。私のカテゴリーの1つをクリックするたびに、1人のオブザーバーを削除して設定することも有効です。このアプローチが良いと思いますか? – tomas

+0

私の編集をチェックしてください:) –

関連する問題