Different swipe direction on Recycler View element

490 Views Asked by At

Is it possbile to implement a recycler view the elements of which swipe on diferent directions depending on a condition? I have done some reserch but I haven't found anything regarding this matter.

I am currently using a Recycler View and I have a ItemTouchHelper.SimpleCallback attached to it. This way I can implement a swipe action to all the elements of the recycler list.

My code is this, I am using getSwipeDirs() function to try an implement what I just explained at the beginning of the question, but it doesn't quite work.

ItemTouchHelper.SimpleCallback simpleCallback = new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) {

        @Override
        public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
            int position = viewHolder.getAdapterPosition();
            switch (direction) {
                case ItemTouchHelper.LEFT:
                    if(!Boolean.parseBoolean(activitiesList.get(position).get(7))) {
                        String doneActivityID = activitiesList.get(position).get(0);
                        DA.markActivityAsDone(doneActivityID, true, seeingDay);
                    }
                    break;
                case ItemTouchHelper.RIGHT:
                    if(Boolean.parseBoolean(activitiesList.get(position).get(7))) {
                        String doneActivityID = activitiesList.get(position).get(0);
                        DA.markActivityAsDone(doneActivityID, false, seeingDay);
                    }
                    break;
            }
        }

        @Override
        public int getSwipeDirs(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) {
            int position = viewHolder.getAdapterPosition();
            Calendar calendar = Calendar.getInstance();
            int today = calendar.get(Calendar.DAY_OF_WEEK) - 2;
            if (activitiesList.get(position).get(4).equals(getWeekDay(today))) {
                if (!Boolean.parseBoolean(activitiesList.get(position).get(7))) {
                    setDefaultSwipeDirs(ItemTouchHelper.LEFT);
                    return super.getSwipeDirs(recyclerView, viewHolder);
                }
                setDefaultSwipeDirs(ItemTouchHelper.RIGHT);
                return super.getSwipeDirs(recyclerView, viewHolder);
            }
            setDefaultSwipeDirs(0);
            return super.getSwipeDirs(recyclerView, viewHolder);
        }

I would really appreciate if someone could tell me if this is possible, and if so show me how.

Thank you!

0

There are 0 best solutions below