2017-01-23 13 views
0

RecyclerViewコントロールの項目ビューをスクロールせずに更新しようとした後、アンドロイド開発で新規です。私の知る限り、項目はスクロール中にonBindViewHolder event.here経由でリフレッシュされます。 notifyItemChangedメソッドを使用してUIを更新しますが、ユーザーがスクロールするまで機能しません。データが変更された後、RecyclerViewはUIを更新しません

注:favoriteMatchesは私のデータソースではありません。 の中にonBindViewHolderイベントがあります。アイテムがfavoriteMatches.contains(match)の場合は、私はおしゃべりしていてfavアイテムとしてレンダリングしています。

call.enqueue(new Callback<AddRemoveFavoriteRequest.Response>() { 
     @Override 
     public void onResponse(Call<AddRemoveFavoriteRequest.Response> call, Response<AddRemoveFavoriteRequest.Response> response) { 
      AddRemoveFavoriteRequest.Response body = response.body(); 
      Utilities.dismissProgressDialog(getActivity(),progressBar); 

      if(body.error == null){ 
       if(add){ 
        favoriteMatches.add(matchId); 
       } 
       else { 
        favoriteMatches.remove(matchId); 
       } 

       adapter.notifyItemChanged(absolutePosition); 
       Preferences.getDefaultPreferences().edit() 
         .putStringSet(Preferences.PREF_FAVORITES,favoriteMatches) 
         .apply(); 

      }else{ 
       Utilities.showSnackBar(getActivity(),recyclerView,body.error); 
      } 
     } 

     @Override 
     public void onFailure(Call<AddRemoveFavoriteRequest.Response> call, Throwable t) { 
      t.printStackTrace(); 
      Utilities.dismissProgressDialog(getActivity(),progressBar); 

     } 
}); 
+0

「absolutePosition」とは何ですか? –

+0

'adapter.notifyDataSetChanged()'を使ってみてください。それでも問題がなければ、データに問題があります。それがうまくいけば、 'absolutePosition'が正しいかどうかを確認してください。 –

答えて

1

notifyItemChangedは、アイテムが変更された位置をとります。

要素が追加および削除されているため、位置が移動します。代わりに、個別の位置で通知することができます。

int changedPosition = 0; 
if(add){ 
    changedPosition = favoritesMatches.size(); 
    favoriteMatches.add(matchId); 
    adapter.notifyItemInserted(changedPosition); 
} 
else { 
    changedPosition = favoriteMatches.indexOf(matchId); // might not work 
    favoriteMatches.remove(matchId); 
    adapter.notifyItemRemoved(changedPosition); 
} 

あるいは、全体ではなく、リストを更新

adapter.notifyDataSetChanged(); 

notifying the adapter詳細についてはこちらをご覧ください、しかしRecyclerViewアダプタ

に注意して、より詳細なアクションが使用されなければならないので、notifyDataSetChanged()に頼るべきではありません。

関連する問題