/Android-SwipeToDismiss-RecyclerView

Android swipe-to-dismiss mini-library and sample code

Primary LanguageJavaApache License 2.0Apache-2.0

DEPRECATED!

Swipe to dismiss feature is added to Android support library. So, it would be better to use that implementation. You can find example here

How to

  • Add to your project build.gradle file
dependencies {
    compile 'com.android.support:appcompat-v7:22.2.0'
    compile 'com.android.support:recyclerview-v7:22.2.0'
}
  • In your project init RecyclerView, LayoutManager, Adapter and ItemTouchHelper
    // init recycler view
    RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
    
    // init layout manager
    LayoutManager layoutManager = new LinearLayoutManager(this);
    // or 
    // LayoutManager layoutManager = new GridLayoutManager(this, 2);
    // or
    // LayoutManager layoutManager = new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL);
    recyclerView.setLayoutManager(layoutManager);
    
    // init data
    final List<String> items = getItems(); // implement #getItems method by yourself

    // init adapter
    RecyclerView.Adapter<CustomViewHolder> adapter = new RecyclerView.Adapter<CustomViewHolder>() {
        @Override
        public CustomViewHolder onCreateViewHolder(ViewGroup viewGroup, final int i) {
        // inflate your view here
            View view = LayoutInflater.from(viewGroup.getContext()).inflate(android.R.layout.simple_list_item_1
                        , viewGroup, false);
            // optionally, to support selectors (different 'colors' on touch/press)
            view.setBackgroundResource(android.R.drawable.list_selector_background);
            view.setClickable(true);
        
            return new CustomViewHolder(view);
        }

        @Override
        public void onBindViewHolder(CustomViewHolder viewHolder, int i) {
            // populate view holder
            viewHolder.mTextView.setText(items.get(i));
        }

        @Override
        public int getItemCount() {
            return mItems.size();
        }
    };
    
    recyclerView.setAdapter(adapter);

    // init swipe to dismiss logic
    ItemTouchHelper swipeToDismissTouchHelper = new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(
                ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) {
        @Override
        public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
            // callback for drag-n-drop, false to skip this feature
            return false;
        }

        @Override
        public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
            // callback for swipe to dismiss, removing item from data and adapter
            items.remove(viewHolder.getAdapterPosition());
            adapter.notifyItemRemoved(viewHolder.getAdapterPosition());
        }
    });
    swipeToDismissTouchHelper.attachToRecyclerView(mRecyclerView);

That's it.

Android Swipe-to-Dismiss RecyclerView Sample Code

Sample code that shows how to make RecyclerView support the swipe-to-dismiss Android UI pattern.

See the original Google+ post for discussion.

See also Jake Wharton's port of this sample code to old versions of Android using the NineOldAndroids compatibility library.

© Roman Nurik (original library)

© Vasya Drobushkov (recycler view support)