2

RecyclerView의 SpannedGridLayoutManager와 함께 ItemTouchHelper와 관련된 문제가 발생했습니다. 드래그 한 항목 옆으로 드래그하면 드래그가 너무 일찍 종료됩니다. 내가 다른 레이아웃 관리자와 아무런 문제없이 작동하기 때문에 그것은 결함있는 레이아웃 관리자라는 것을 알고 있습니다.ItemTouchHelper with SpannedGridLayoutManager - RecyclerView issues

누군가 이미 이것을 해결 했습니까?

답변

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; 
    } 
} 
}