2

我在 RecyclerView 中遇到了 ItemTouchHelper 与 SpannedGridLayoutManager 结合的问题,当拖动到被拖动项目旁边的项目时,拖动会过早结束。我知道它是有故障的布局管理器,因为它可以与其他布局管理器一起使用而没有任何问题。

有人已经解决了吗?

4

1 回答 1

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;
    }
 }
}
于 2018-03-10T22:45:50.600 回答