The problem is, in my recyclerview - adapter, clicking on delete button, I'm showing small progressbar in place of delete button. Now suppose it is taking 2 minutes to complete the delete process. So in mean time if user is scrolling recyclerview, that running progressbar swaps the position.
How can I control that?
FLOW: Clicked delete - delete.onClicklistener - inside listener - notified in activity - calling async task - asynctask result listener is onDeleteDataReceived - inside called updateView() which is in adapter class - inside updateView() change visibility.
NOTE: Item is being deleted correctly for that particular position, but progressbar position swaps while scrolling recyclerview
I already checked this answer, but not working in my case: Why does the input value in EditText swaps its position while scrolling in a RecyclerView?
Code:
Adapter class:
public void updateView(int position, RecyclerView.ViewHolder viewHolder) {
try {
if (viewHolder.getAdapterPosition() == position) {
MyViewHolder holder = (MyViewHolder) viewHolder;
holder.delete.setVisibility(View.VISIBLE);
holder.progressBar.setVisibility(View.GONE);
notifyItemRemoved(position);
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onBindViewHolder(final MyViewHolder holder, final int position) {
Events events = eventList.get(position);
holder.delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (listener != null) {
holder.delete.setVisibility(View.GONE);
holder.progressBar.setVisibility(View.VISIBLE);
eventList.get(position).isSelected = true;
listener.onClicked(position, eventList.get(position).getEventId());
}
}
});
Activity:
@Override
public void onDeleteDataReceived(Boolean status, int position) {
stopShimmerLayout();
if (status) {
try {
if (eventsList.get(position).isSelected) {
eventsList.remove(position);
RecyclerView.ViewHolder viewHolder = recyclerView.findViewHolderForAdapterPosition(position);
mAdapter.updateView(position, viewHolder);
}
} catch (Exception e) {
e.printStackTrace();
}
} else {
showToast(context, "Failed", Toast.LENGTH_SHORT);
}
}
See the video for better understanding: https://drive.google.com/open?id=13ZAtnyfGbi2X4JjUTmJsIDy-gt5y51Gr
Implementation: https://drive.google.com/open?id=1ePOfZctEO_IhzUM3bFYW3VJKThoVkI6a
WHAT IS THIS? why everyone is telling the same thing? What I'm asking is everything is working correctly. I'm able to show progressbar and delete button visibility for correct position and also item is also being delete correctly by user selected position. The problem is while deleting if I start scrolling very fast that time that running progressbar swaps the position. But that item is deleted in mean time when I again reach that position.