[英]How to know when user is done moving a RecyclerView item?
當用戶丟棄物品時,我需要執行某些操作。 ItemTouchHelper 似乎只調用 onMove 和 onMoved ,無論用戶是否實際完成移動項目。 我如何知道用戶何時完成移動項目? 即,他們已經松開手指並將項目放回recyclerView?
您可以覆蓋ItemTouchHelper.Callback
class 實現的onSelectedChanged()
回調,並使用可以是( ACTION_STATE_DRAG
、 ACTION_STATE_SWIPE
和ACTION_STATE_IDLE
)之一的開關情況檢查actionState
值。
ACTION_STATE_IDLE
是您要查找的內容,當滑動/拖動操作結束並且用戶將手指離開屏幕時將觸發它
您可以使用 boolean 來確定它是滑動還是拖動,如下所示。
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;
}
}
});
}
然后在你的RecyclerView
上使用它
createHelperCallback().attachToRecyclerView(recyclerView);
預習
簡單的。 只需覆蓋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();
}
您還可以覆蓋getAnimationDuration()
,它在onSelectedChanged()
之前調用(就在用戶手指抬起時),但您無法訪問此viewHolder
中的 viewHolder。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.