androiduser
androiduser

Reputation: 189

Recycler view refresh issue

I m trying to delete items from a recylerview. Items get removed from the list but its showing only the last item removed in the list i.e., the list is not refreshing properly. Can any body tell me what could be the issue

 private ArrayList<SentMessageModel> message;
    private SentMessageModel mModel;
    private LayoutInflater inflater;
    private Context context;
    private ProgressDialog mDialog;
    private View view;
    private Set<String> conversationId = new HashSet<>();

    public SentMessageAdapter(Context context, ArrayList<SentMessageModel> message) {
        this.context = context;
        inflater = LayoutInflater.from(context);
        this.message = message;
        mDialog = new ProgressDialog(context);
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        view = inflater.inflate(R.layout.item_message_row, parent, false);
        MyViewHolder holder = new MyViewHolder(view);
        return holder;
    }

    @Override
    public void onBindViewHolder(final MyViewHolder holder, final int position) {
         SentMessageModel mSendModel = message.get(position);
        holder.nameText.setText(mSendModel.getConversationUsername());
        holder.msgText.setText(mSendModel.getSubject());
        holder.bodyText.setText(mSendModel.getBody());
        Glide.with(context)
                .load(ImageLoadingUtil.getProfileImageUrl(mSendModel.getSenderAvatar()))
                .error(R.drawable.logo_round)
                .into(holder.userImage);
        holder.ll_message_row.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                Intent mIntent = new Intent(context, ViewSentMessageActivity.class);
                mIntent.putExtra("sent_conversation_id", message.get(position).getConversationId());
                context.startActivity(mIntent);
            }
        });
        holder.mCheckBox.setTag(position);
        holder.mCheckBox.setChecked(conversationId.contains(String.valueOf(mSendModel.getConversationId())));
        holder.mCheckBox.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int position = (int) v.getTag();
                mModel = message.get(position);
                if (holder.mCheckBox.isChecked()) {
                    conversationId.add(mModel.getConversationId().toString());
                } else {
                    conversationId.remove(mModel.getConversationId().toString());
                }
                System.out.println("Print conversationId 2 " + conversationId);
            }
        });
    }

    public void selectCheckbox(boolean isCheckedState) {
        conversationId.clear();
        for (int i = 0; i < message.size(); i++) {
            if (isCheckedState) {
                conversationId.add(message.get(i).getConversationId().toString());
            } else {
                conversationId.remove(message.get(i).getConversationId().toString());
            }
        }
         notifyDataSetChanged();
    }

    public void callMoveToTrash() {
        if (conversationId.size() > 0) {
            String trimmedArray = conversationId.toString();
            trimmedArray = trimmedArray.replaceAll(" ", "");

            mDialog.setMessage("Please wait...");
            mDialog.setCancelable(false);
            mDialog.show();
            ApiManager.getService().moveToTrash(LocalStorage.getAuthToken(context), trimmedArray)
                    .enqueue(new Callback<MoveToTrahsModel>() {
                        @Override
                        public void onResponse(Response<MoveToTrahsModel> response, Retrofit retrofit) {
                            if (response.isSuccess() && response.body() != null) {
                                message.remove(mModel);
                                notifyDataSetChanged();
                                conversationId.clear();
                                mDialog.dismiss();
                            }
                        }

                        @Override
                        public void onFailure(Throwable t) {
                            System.out.println("Print ex " + t.getMessage());
                            t.getMessage();
                            mDialog.dismiss();
                        }
                    });
        } else {
            ((MessageActivity) context).showSnackbar(context.getResources().getString(R.string.select_one_item));
        }
    }

    @Override
    public int getItemCount() {
        return message.size();
    }

    public class MyViewHolder extends RecyclerView.ViewHolder {

        private TextView nameText, msgText, bodyText;
        private RelativeLayout ll_message_row;
        private CheckBox mCheckBox;
        private ImageView userImage;

        public MyViewHolder(View itemView) {
            super(itemView);
            nameText = (TextView) itemView.findViewById(R.id.nameTextView);
            msgText = (TextView) itemView.findViewById(R.id.subjectTextView);
            bodyText = (TextView) itemView.findViewById(R.id.bodyTextView);
            mCheckBox = (CheckBox) itemView.findViewById(R.id.check_box);
            userImage = (ImageView) itemView.findViewById(R.id.user_image);
            ll_message_row = (RelativeLayout) itemView.findViewById(R.id.message_row);
        }
    }

Upvotes: 0

Views: 249

Answers (2)

Farbod Salamat-Zadeh
Farbod Salamat-Zadeh

Reputation: 20140

When an item gets removed from the list you are using to populate your RecyclerView adapter (in this case, when items get removed or added to your ArrayList<SentMessageModel), you need to do the following:

adapter.notifyDataSetChanged();

You would call this from the same class from which you initialise your adapter class.

Upvotes: 0

h_patel
h_patel

Reputation: 744

use this

private ArrayList<SentMessageModel> message;
private SentMessageModel mModel;
private LayoutInflater inflater;
private Context context;
private ProgressDialog mDialog;
private View view;
private Set<String> conversationId = new HashSet<>();

public SentMessageAdapter(Context context, ArrayList<SentMessageModel> message) {
    this.context = context;
    inflater = LayoutInflater.from(context);
    this.message = message;
    mDialog = new ProgressDialog(context);
}

@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    view = inflater.inflate(R.layout.item_message_row, parent, false);
    MyViewHolder holder = new MyViewHolder(view);
    return holder;
}

@Override
public void onBindViewHolder(final MyViewHolder holder, final int position) {
     SentMessageModel mSendModel = message.get(position);
    holder.nameText.setText(mSendModel.getConversationUsername());
    holder.msgText.setText(mSendModel.getSubject());
    holder.bodyText.setText(mSendModel.getBody());
    Glide.with(context)
            .load(ImageLoadingUtil.getProfileImageUrl(mSendModel.getSenderAvatar()))
            .error(R.drawable.logo_round)
            .into(holder.userImage);
    holder.ll_message_row.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            Intent mIntent = new Intent(context, ViewSentMessageActivity.class);
            mIntent.putExtra("sent_conversation_id", message.get(position).getConversationId());
            context.startActivity(mIntent);
        }
    });
    holder.mCheckBox.setTag(position);
    holder.mCheckBox.setChecked(conversationId.contains(String.valueOf(mSendModel.getConversationId())));
    holder.mCheckBox.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            int position = (int) v.getTag();
            mModel = message.get(position);
            if (holder.mCheckBox.isChecked()) {
                conversationId.add(mModel.getConversationId().toString());
            } else {
                conversationId.remove(mModel.getConversationId().toString());
            }
            notifyDataSetChanged();
            System.out.println("Print conversationId 2 " + conversationId);
        }
    });
}

public void selectCheckbox(boolean isCheckedState) {
    conversationId.clear();
    for (int i = 0; i < message.size(); i++) {
        if (isCheckedState) {
            conversationId.add(message.get(i).getConversationId().toString());
        } else {
            conversationId.remove(message.get(i).getConversationId().toString());
        }
    }

}

public void callMoveToTrash() {
    if (conversationId.size() > 0) {
        String trimmedArray = conversationId.toString();
        trimmedArray = trimmedArray.replaceAll(" ", "");

        mDialog.setMessage("Please wait...");
        mDialog.setCancelable(false);
        mDialog.show();
        ApiManager.getService().moveToTrash(LocalStorage.getAuthToken(context), trimmedArray)
                .enqueue(new Callback<MoveToTrahsModel>() {
                    @Override
                    public void onResponse(Response<MoveToTrahsModel> response, Retrofit retrofit) {
                        if (response.isSuccess() && response.body() != null) {
                            message.remove(mModel);
                            notifyDataSetChanged();
                            conversationId.clear();
                            mDialog.dismiss();
                        }
                    }

                    @Override
                    public void onFailure(Throwable t) {
                        System.out.println("Print ex " + t.getMessage());
                        t.getMessage();
                        mDialog.dismiss();
                    }
                });
    } else {
        ((MessageActivity) context).showSnackbar(context.getResources().getString(R.string.select_one_item));
    }
}

@Override
public int getItemCount() {
    return message.size();
}

public class MyViewHolder extends RecyclerView.ViewHolder {

    private TextView nameText, msgText, bodyText;
    private RelativeLayout ll_message_row;
    private CheckBox mCheckBox;
    private ImageView userImage;

    public MyViewHolder(View itemView) {
        super(itemView);
        nameText = (TextView) itemView.findViewById(R.id.nameTextView);
        msgText = (TextView) itemView.findViewById(R.id.subjectTextView);
        bodyText = (TextView) itemView.findViewById(R.id.bodyTextView);
        mCheckBox = (CheckBox) itemView.findViewById(R.id.check_box);
        userImage = (ImageView) itemView.findViewById(R.id.user_image);
        ll_message_row = (RelativeLayout) itemView.findViewById(R.id.message_row);
    }
}

Upvotes: 1

Related Questions