2

私は、RecyclerViewのSpannedGridLayoutManagerと組み合わせてItemTouchHelperの問題に直面しています。ドラッグされたアイテムの隣にあるアイテムにドラッグすると、ドラッグが途中で終了します。私はそれが他のレイアウトマネージャと何の問題もなく働くので、不思議なレイアウトマネージャであることを知っています。ItemTouch Helper with 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; 
    } 
} 
}