2

У меня возникла проблема с ItemTouchHelper в сочетании с SpannedGridLayoutManager в моем RecyclerView, перетаскивание заканчивается преждевременно при перетаскивании на элемент рядом с перетаскиваемым. Я знаю, что это глючный менеджер макетов, потому что он работает с другими менеджерами макетов без каких-либо проблем.ItemTouchHelper с SpannedGridLayoutManager - Проблемы с RecyclerView

Неужели кто-то уже это проработал?

ответ

0

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; 
    } 
} 
} 
Смежные вопросы