Я использую адаптер recyclerView с адаптером. все работает хорошо, но когда я пытаюсь изменить некоторые данные (отметить элемент как понравившийся), но notifyDataSetChanged не обновляет его в режиме реального времени. если я выхожу из активности, а затем запускаю ее снова - все данные сохраняются и корректируются.
вот мой код:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_contacts, container, false);
initLoader();
setAdapter();
}
public void setAdapter(){
mContactAdapter = new ContactsAdapter(getActivity().getApplicationContext(), this);
mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
mRecyclerView.setAdapter(mContactAdapter);
}
@Override
public void onFavoriteItemClicked(ImageView view, int position) {
mMainCursor.moveToPosition(position);
int status = -1;
int currentStatus = mMainCursor.getInt(ContactsActivityFragment.COL_CONTACT_FAVORITE);
switch (currentStatus){
case SU_VARIABLES.CONTACT_IS_FAVORITE:
view.setImageResource(R.drawable.icon_fav);
status = SU_VARIABLES.CONTACT_NOT_FAVORITE;
break;
case SU_VARIABLES.CONTACT_NOT_FAVORITE:
view.setImageResource(R.drawable.icon_fav_active);
status = SU_VARIABLES.CONTACT_IS_FAVORITE;
break;
}
ContentValues values = new ContentValues();
values.put(SU_Contract.ContactsEntry.CONTACT_FAVORITE, status);
String id = mMainCursor.getString(ContactsActivityFragment.COL_CONTACT_ID);
String selection = SU_Contract.ContactsEntry.CONTACT_ID + " = " + id;
getActivity().getContentResolver().update(SU_Contract.ContactsEntry.CONTENT_URI,values, selection, null);
mContactAdapter.notifyDataSetChanged();
}
EDIT вот мой адаптер:
public class ContactsAdapter extends RecyclerView.Adapter<ContactsAdapter.ContactsViewHolder> {
public ContactsAdapter(Context c, OnContactItemClicked clicked){
sContext = c;
sInterface = clicked;
}
private static OnContactItemClicked sInterface;
private static Context sContext;
private static Cursor sCursor;
private static ContactsViewHolder sHolder;
@Override
public ContactsViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View rootView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_list_people, parent, false);
sHolder = new ContactsViewHolder(rootView);
return sHolder;
}
@Override
public void onBindViewHolder(ContactsViewHolder holder, int position) {
if (sCursor != null){
sCursor.moveToPosition(position);
String name = sCursor.getString(ContactsActivityFragment.COL_CONTACT_NAME);
String phone = sCursor.getString(ContactsActivityFragment.COL_CONTACT_PHONE);
String imgUrl = sCursor.getString(ContactsActivityFragment.COL_CONTACT_IMAGE);
int currentStatus = sCursor.getInt(ContactsActivityFragment.COL_CONTACT_FAVORITE);
switch (currentStatus){
case SU_VARIABLES.CONTACT_NOT_FAVORITE:
sHolder.mUserRating.setImageResource(R.drawable.icon_fav);
break;
case SU_VARIABLES.CONTACT_IS_FAVORITE:
sHolder.mUserRating.setImageResource(R.drawable.icon_fav_active);
break;
}
holder.mUserName.setText(name);
if (phone != null && phone.length() > 9){
holder.mUserPhone.setText(phone);
}
}
}
@Override
public int getItemCount() {
int size = 0;
if (sCursor != null){
size = sCursor.getCount();
}
return size;
}
public void swapCursor(Cursor cursor){
if (sCursor != null && sCursor.isClosed()){
sCursor.close();
}
sCursor = cursor;
notifyDataSetChanged();
}
public static class ContactsViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
@Bind(R.id.tv_profile_name) TextView mUserName;
@Bind(R.id.tv_contactItem_phone) TextView mUserPhone;
@Bind(R.id.img_user_card) ImageView mCardImg;
@Bind(R.id.img_user_phone) ImageView mPhoneImg;
@Bind(R.id.img_profile_rating) ImageView mUserRating;
@Bind(R.id.img_profile_photo) CircularImageView mUserPhoto;
public ContactsViewHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
itemView.setOnClickListener(this);
}
@OnClick(R.id.img_profile_rating)
public void onFavoriteClicked(){
sInterface.onFavoriteItemClicked(sHolder.mUserRating, getAdapterPosition());
}
@Override
public void onClick(View v) {
int pos = getAdapterPosition();
sInterface.onRecyclerViewItemClicked(v, pos);
}
}
public interface OnContactItemClicked{
void onRecyclerViewItemClicked(View view, int position);
void onFavoriteItemClicked(ImageView view, int position);
}
}
mContactAdapter.notifyDataSetChanged();
в вашем прослушивателе кликов не требуется, если вы собираетесь обновлять адаптер из обратного вызова загрузчика. - person Ari   schedule 09.11.2015