Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
**BETA** Android 4.0-style "Swipe to Dismiss" sample code
Moved to

This is very useful, thanks!

Pretty good, but requires higher api level 10 and 11.It would be better if it can run on a 2.2 machine.

Thank you so much

There is a big bug in If user swipe multiple items in a short time, you can find some items view will not be really dismissed, but, the item will be deleted from list...

And, I think you should add ACTION_CANCEL event:
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
unless, there will be a bug when you hold a view to swipe then rotate the screen of phone, the view will stay where they have been moved and cannot dismiss or be back to the origin position where it was.

aramiku commented Jul 7, 2013

Sometimes when you swipe up just to roll the list in the intent to show the itens below, if the swipe go a litle bit aside, the item you put your finger on is deleted. The gesture is interpreted wrong . I sugest a more longer swipe to the side to be interpreted as a swipe to delete/dismiss. Great Job.

pjbrinck commented Jul 9, 2013


Really nice work...

I am experiencing, when also adding an OnItemLongClickListener to the ListView, that SwipeDismissListViewTouchListener is not paused during long clicks. This would be similar to pausing SwipeDismissListViewTouchListener during scrolling.

Would you consider updating SwipeDismissListViewTouchListener to also manage such?

best regards

Thanks, awesome!
And with use of, you can get it working on older versions.


I am working my way thru the code to identify the cause of a "bug"... but having some difficulty getting my head around it. I was hoping we could do this together.

I'm experiencing, when in onItemClick() I call adapter.notifyDataSetChanged(), adapter.getView() is NOT called for the item/position clicked, but is nicely called for all other visible items/positions.

If I omit setting the SwipeDismissListViewTouchListener on the list view (disabling the swipe-remove functionality), adapter.getView() is CERTAINLY called for all visible items, including the clicked item, in the scenario above.

Please help me identify what causes this slightly different behavior.

best regards pjbrinck

@pjbrinck, you probably already fixed it, but I faced this bug today, and fixed it (plus another small bug):

Roman, thank you very much for this snippet, very useful for today's Android UI design.

I have a problem with CursorLoaders. When you use this with a regular ArrayAdapter, you can remove all the dismissed items and then call notifyDataSetChanged() w/o any problem. When I use SimpleCursorAdapter with CursorLoader and LoaderManager, it automatically detects the changes in the database and update the UI whenever a change occurs. So the result it that there are items going out and coming again and going out again. How can I solve this? Has anyone experienced such problem?

Hello! It's very good job. I have a small quastion: How can I disable swipe to one side (for example swipe to left)?

It is very good job.

So I was trying to use this little library for my list and when I put a list inside a PagerViewer... the swipe won't work, everytime I tried, it just swipe between the pages on the PagerViewer, is there a way to distinguish between them? can you swipe the list item horizontally without the PagerViewer intercepts the swipe and swipe its pages?

Yougin commented Apr 17, 2014

Has anyone found a solution for a problem tasomaniac mentioned (SwipeToDismiss and CursorLoader) ?

@Yougin I haven't tried but this can solve it. You can disable automatic loading of the CursorLoader using a custom CursorLoader. Chris Banes does it in his open-source Photup application.

You might want to make a temporary cursor that manually hides the dismissed indices while the updated cursor loads. Something like this might accomplish what you need.

Very good library , i am using it.
Please help me ,How to handle left and right swipe?

Thanks In Advance

Thanks a lot.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment