ItemTouchHelper с SpannedGridLayoutManager - проблемы с RecyclerView
Я столкнулся с проблемой с ItemTouchHelper в сочетании с SpannedGridLayoutManager в моем RecyclerView, перетаскивание заканчивается преждевременно при перетаскивании на элемент рядом с перетаскиваемым. Я знаю, что это глючный менеджер компоновки, потому что он работает с другими менеджерами компоновки без проблем.
Кто-нибудь уже разобрался с этим?
1 ответ
Обратный вызов onSelectedChanged(RecyclerView.ViewHolder, int) предоставляет информацию о текущем actionState: - ACTION_STATE_IDLE: - ACTION_STATE_DRAG - ACTION_STATE_SWIPE
Таким образом, вы можете отслеживать, изменился ли порядок, и когда состояние меняется на ACTION_STATE_IDLE, вы можете делать то, что вам нужно!
Реализуйте класс обратного вызова, как это.
class CardsTouchHelperCallback extends ItemTouchHelper.Callback {
...
@Override
public boolean onMove(RecyclerView recyclerView,
RecyclerView.ViewHolder viewHolder,
RecyclerView.ViewHolder target) {
int fromPosition = viewHolder.getAdapterPosition();
int toPosition = target.getAdapterPosition();
dragFrom = fromPosition;
dragTo = toPosition;
mOrderChanged = true;
return false;
}
@Override
public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) {
super.onSelectedChanged(viewHolder, actionState);
if (actionState == ItemTouchHelper.ACTION_STATE_IDLE && mOrderChanged) {
//doSomething();
touchHelperAdapter.onItemMove(dragFrom, dragTo);
mOrderChanged = false;
}
}
}