hiwa-jalal
12/23/2019 - 2:14 PM

recyclerview swipes and move

// implementation 'it.xabaras.android:recyclerview-swipedecorator:1.2.2'


 // create this in your class

    // to manage the deleted model
    Food deletedFood = null;

    ItemTouchHelper.SimpleCallback simpleCallback = new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT) {
        // for arranging rows
        @Override
        public boolean onMove(@NonNull RecyclerView recyclerView,
                              @NonNull RecyclerView.ViewHolder viewHolder,
                              @NonNull RecyclerView.ViewHolder target) {
            return false;
        }

        // for managing swipes
        @Override
        public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
            int position = viewHolder.getAdapterPosition();
                    deletedFood = foods.get(position);
                    // remove from the array list
                    foods.remove(position);
                    // remove from the actual adapter
                    cartOrdersAdapter.notifyItemRemoved(position);

                    Snackbar.make(recyclerView,
                            "Removed " + deletedFood.getTitle() + " From Your Orders",
                            Snackbar.LENGTH_LONG)
                            .setAction("Undo", v -> {
                                foods.add(position, deletedFood);
                                cartOrdersAdapter.notifyItemInserted(position);
                                recyclerView.smoothScrollToPosition(position);
                            }).setActionTextColor(
                                    ContextCompat.getColor(getActivity(), R.color.colorPrimaryDark))
                            .show();
            }


        @Override
        public void onChildDraw(@NonNull Canvas c, @NonNull RecyclerView recyclerView,
                                @NonNull RecyclerView.ViewHolder viewHolder,
                                float dX, float dY, int actionState, boolean isCurrentlyActive) {
            new RecyclerViewSwipeDecorator.Builder(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive)
                    .addSwipeLeftBackgroundColor(ContextCompat.getColor(getActivity(), R.color.red))
                    .addSwipeLeftActionIcon(R.drawable.x_delete_green)
                    .create()
                    .decorate();
            super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
        }
    };
}
    
    
    // in onCreate() 
  
   // attach direction to our recyclerview
  ItemTouchHelper itemTouchHelper = new ItemTouchHelper(simpleCallback);
  itemTouchHelper.attachToRecyclerView(recyclerView);
  

  
 ItemTouchHelper.SimpleCallback simpleCallback = new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) {
        // for arranging rows
        @Override
        public boolean onMove(@NonNull RecyclerView recyclerView,
                              @NonNull RecyclerView.ViewHolder viewHolder,
                              @NonNull RecyclerView.ViewHolder target) {
            return false;
        }

        // for managing swipes
        @Override
        public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
            int position = viewHolder.getAdapterPosition();

            switch (direction) {
                case ItemTouchHelper.LEFT:
                    // remove from the array list
                    foods.remove(position);
                    // remove from the actual adapter
                    cartOrdersAdapter.notifyItemRemoved(position);
                    break;
                case ItemTouchHelper.RIGHT:

                    break;
            }
        }
    };
// for your row item in XML 
  android:background="@android:color/white"
  android:foreground="aBackgorundOfMyChoice"

// create an ItemTouchHelper
 ItemTouchHelper.SimpleCallback simpleCallback = new ItemTouchHelper.SimpleCallback(
            ItemTouchHelper.UP | ItemTouchHelper.DOWN |
                    ItemTouchHelper.START | ItemTouchHelper.END, 0) {
        @Override
        public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
            // the start position
            int fromPosition = viewHolder.getAdapterPosition();
            // the target position
            int toPosition = target.getAdapterPosition();

            Collections.swap(foods, fromPosition, toPosition);
            recyclerView.getAdapter().notifyItemMoved(fromPosition, toPosition);

            return false;
        }

        @Override
        public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {

        }
    };