【问题标题】:ItemTouchHelper with SpannedGridLayoutManager - RecyclerView issues带有 SpannedGridLayoutManager 的 ItemTouchHelper - RecyclerView 问题
【发布时间】:2017-02-11 14:31:54
【问题描述】:
我在 RecyclerView 中遇到了 ItemTouchHelper 与 SpannedGridLayoutManager 结合的问题,当拖动到被拖动项目旁边的项目时,拖动会过早结束。我知道它是有故障的布局管理器,因为它可以与其他布局管理器一起使用而没有任何问题。
有人已经解决了吗?
【问题讨论】:
标签:
android
android-recyclerview
gridlayoutmanager
itemtouchhelper
【解决方案1】:
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;
}
}
}