Ben*_*ora 5 android android-recyclerview itemtouchhelper
当用户删除某个项目时,我需要执行一些操作。ItemTouchHelper 似乎只调用 onMove 和 onMoved,无论用户是否真正完成了项目的移动,这些调用都会发生。我如何知道用户何时完成移动项目?即,他们已经松开手指并将项目放回到 recyclerView 中?
您可以覆盖类onSelectedChanged()实现的回调ItemTouchHelper.Callback,并使用可以是 ( 、、 & )actionState之一的 switch case 检查值。ACTION_STATE_DRAGACTION_STATE_SWIPEACTION_STATE_IDLE
ACTION_STATE_IDLE是您正在寻找的内容,当滑动/拖动操作结束并且用户将手指离开屏幕时会触发它
您可以使用布尔值来确定是滑动还是拖动,如下所示。
private ItemTouchHelper createHelperCallback() {
return new ItemTouchHelper(new ItemTouchHelper.Callback() {
boolean isSwiped = false;
@Override
public int getMovementFlags(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) {
return 0;
}
@Override
public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
return false;
}
@Override
public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
}
@Override
public void onSelectedChanged(@Nullable RecyclerView.ViewHolder viewHolder, int actionState) {
switch (actionState) {
case ItemTouchHelper.ACTION_STATE_DRAG:
// the user is dragging an item and didn't lift their finger off yet
isSwiped = false;
break;
case ItemTouchHelper.ACTION_STATE_SWIPE:
// the user is swiping an item and didn't lift their finger off yet
isSwiped = true;
break;
case ItemTouchHelper.ACTION_STATE_IDLE:
// the user just dropped the item (after dragging it), and lift their finger off.
if (isSwiped) // The user used onSwiped()
Toast.makeText(MainActivity.this, "Swiping is over", Toast.LENGTH_SHORT).show();
else // The user used onMove()
Toast.makeText(MainActivity.this, "Dragging & Dropping are over", Toast.LENGTH_SHORT).show();
isSwiped = false;
}
}
});
}
Run Code Online (Sandbox Code Playgroud)
然后将其用在您的RecyclerView
createHelperCallback().attachToRecyclerView(recyclerView);
Run Code Online (Sandbox Code Playgroud)
预览

简单的。只需覆盖onClearView():
@Override
public void clearView(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) { //called when you dropped the item
super.clearView(recyclerView, viewHolder);
Toast.makeText(recyclerView.getContext(), "Item dropped on position: " + viewHolder.getAdapterPosition(), Toast.LENGTH_SHORT).show();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1240 次 |
| 最近记录: |