带有SpannedGridLayoutManager的ItemTouchHelper - RecyclerView问题

时间:2017-02-11 14:31:54

标签: android android-recyclerview gridlayoutmanager itemtouchhelper

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

有人已经解决了这个问题吗?

1 个答案:

答案 0 :(得分: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;
    }
 }
}