public

**BETA** Android 4.0-style "Swipe to Dismiss" sample code

  • Download Gist
SwipeDismissListViewTouchListener.java
Java
1 2
Moved to
https://github.com/romannurik/android-swipetodismiss

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.

There is a big bug in SwipeDismissListViewTouchListener.java. 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.

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.

Roman,

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 http://nineoldandroids.com/, you can get it working on older versions.

Roman,

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):

https://gist.github.com/D4rKn3sSyS/6057805

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?

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. https://github.com/chrisbanes/photup/blob/master/client/src/uk/co/senab/photup/util/PhotupCursorLoader.java

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.