ItemTouchHelper для горизонтальной RecyclerView - PullRequest
0 голосов
/ 25 октября 2018

Я пытаюсь реализовать ItemTouchHelper для горизонтального просмотра Recycler.(установка менеджера компоновки в LinearLayoutManager с ориентацией LinearLayoutManager.HORIZONTAL).Например, я хочу удалить элемент при наведении вниз и перетащить влево или вправо для замены элементов.

Все образцы, через которые я прошел, объясняют ItemTouchHelper для Vertical Recyclerview или элементы в сетке.

Следуют за примерами по следующим ссылкам:
https://medium.com/@ipaulpro/drag-and-swipe-with-recyclerview-b9456d2b1aaf
https://medium.com/@xabaras/recyclerview-swiping-with-style-151e21b1af07

Как можно добиться, проведя пальцем вниз, чтобы удалить и перетащить вбок, чтобы поменять объекты в горизонтальном представлении Recyclerview?

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Вам нужно только изменить метод "getMovementFlags".

@Override
public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
    int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN;
    int swipeFlags = ItemTouchHelper.START | ItemTouchHelper.END;
    return makeMovementFlags(dragFlags, swipeFlags);
}

на

@Override
public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
    final int swipeFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN;
    final int dragFlags = ItemTouchHelper.START | ItemTouchHelper.END;
    return makeMovementFlags(dragFlags, swipeFlags);
}

Чтобы удалить элемент, создайте новый метод в "ItemTouchHelperAdapter" с именем "onSwiped"и реализовать его, чтобы удалить пункт

@Override
public boolean onSwiped(int itemPosition, int direction) {
    if(direction == SimpleItemTouchHelperCallback.SWIPED_TO_END) {
        list.remove(itemPosition);
        notifyItemRemoved(itemPosition);
    }else{
        notifyItemChanged(itemPosition);
    }
    return true;
}
0 голосов
/ 25 октября 2018

Вы можете использовать этот простой код, чтобы провести пальцем вниз, чтобы удалить.

ItemTouchHelper.SimpleCallback simpleCallback = new ItemTouchHelper.SimpleCallback(0,ItemTouchHelper.DOWN) {
            @Override
            public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder,  RecyclerView.ViewHolder target) {
            return false;
        }

        @Override
        public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
            final int position = viewHolder.getLayoutPosition();
            if (direction == ItemTouchHelper.DOWN) {
                //your code for deleting the item from database or from the list
                adapter.removeNote(position);
                adapter.notifyItemRemoved(position)
            }
        }
    };
    ItemTouchHelper itemTouchHelper = new ItemTouchHelper(simpleCallback);
    itemTouchHelper.attachToRecyclerView(recyclerView);

Для фанатов Kotlin ниже приведен код того же самого -

val simpleCallback = object : ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.DOWN) {
        override fun onMove(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder, target: RecyclerView.ViewHolder): Boolean {
            return false
        }

        override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
            if (direction == ItemTouchHelper.DOWN) {
                //your code for deleting the item from database or from the list
                val position = viewHolder.adapterPosition
                noteList.removeAt(position)
                adapter.notifyItemRemoved(position)
            }
        }
    }
    val itemTouchHelper = ItemTouchHelper(simpleCallback)
    itemTouchHelper.attachToRecyclerView(recycler_view)
...