iPaulPro / Android-ItemTouchHelper-Demo

Basic example of using ItemTouchHelper to add drag & drop and swipe-to-dismiss to RecyclerView.
Apache License 2.0
2.51k stars 499 forks source link

getAdapterPosition() can be wrong #15

Open scriptacus opened 9 years ago

scriptacus commented 9 years ago

This isn't a bug with this code, but I'm throwing it out there as a potential gotcha that I only ran into after implementing the dismiss/swap functionality from this demo.

After a dismiss or swap of items in a recycler view, "holder.getAdapterPosition()" will return NO_POSITION (-1) if you've called "notifyDataSetChanged()" since the last layout pass. I was passing getAdapterPosition() to my Activity in response to some user interaction, which had always worked previously. After either of the actions above, the adapter position became invalid until an orientation change or attempt to scroll the screen. Using getLayoutPosition() in place of getAdapterPosition() resolved the issue.

Farasy commented 8 years ago

Thanks for info.

pixelbendr commented 8 years ago

Yes I noticed this, my app start crashes sometimes on swipe; when I run the test getAdapterPosition is -1. :( is there a fix for this.