2015-06-12 3 views
2

В версии 22.2 библиотеки поддержки recyclerview-v7 Google представил ItemTouchHelper, чтобы облегчить перетаскивание и прокрутку элементов.Получите доступ к телефону. ItemTouchHelper Android

В моем RecyclerView, я хотел был бы включить эти функции на одном View/часть только элемента адаптера, а не полный элемент. Есть ли способ ограничить область действия ItemTouchHelper конкретной цели? Или, может быть, коснуться View, когда ItemTouchHelper.onMoved() или ItemTouchHelper.onSwiped() вызываются, чтобы иметь возможность фильтровать разрешенные View?

+0

Вы хотите перетащить и пронести только конкретный ребенок элемента RecyclerView, или вы хотите перетащить/перетащить весь предмет только тогда, когда этот ребенок коснулся? – stan0

ответ

0

onMove метод имеет параметр RecyclerView.ViewHolder viewHolder. viewHolder.itemView должен быть прикосненным видом. Если это представление, которое нужно переместить, переместите его на целевой объект и дайте onMove метод return true еще false.

public abstract boolean onMove (RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) 


Parameters 
recyclerView The RecyclerView to which ItemTouchHelper is attached to. 
viewHolder The ViewHolder which is being dragged by the user. 
target The ViewHolder over which the currently active item is being dragged. 
+0

Я не знал о 'ViewHolder.itemView', но кажется, что это полный« Просмотр », задутый в адаптере, а не дочерний« Просмотр », который был затронут. Это верно? –

+0

О, да, я прочитал ваш вопрос и понял его сейчас. – random

+0

ItemTouchHelper используется для обеспечения обратных вызовов для полного перемещения элементов recyclerview, а ViewHolder.itemView - это полный вид элемента. – random

0

ItemTouchHelper.startDrag(RecyclerView.ViewHolder) Чтобы начать перетащить вручную, вы можете использовать ItemTouchHelper.startDrag(RecyclerView.ViewHolder).

Ваш ItemTouchHelper.Callback должен возвращать false с isLongPressDragEnabled(). Затем вы можете создать interface в своем RecyclerView.Adapter, чтобы дать Fragment/Activity информацию о длинном нажатии на ваш «дескриптор» View.

Чтобы увидеть пример этого, проверить мой ItemTouchHelper пример проекта:

https://github.com/iPaulPro/Android-ItemTouchHelper-Demo

RecyclerListAdapter имеет OnStartDragListener, который уведомляет RecyclerListFragment, что сопротивление должно быть начато (вызов startDrag()).