一般任务:我想为 FirebaseRecyclerAdapter 实现“拖放”和“滑动关闭”功能。它应该像这样工作: 拖动和滑动 .gif 示例。 首先,我将创建一个允许传递事件回调的接口:
public interface ItemTouchHelperAdapter {
boolean onItemMove(int fromPosition, int toPosition);
void onItemDismiss(int position); }
比创建 ItemTouchHelperCallback,允许监听“移动”和“滑动”事件的接口:
public class ItemTouchHelperCallback extends ItemTouchHelper.Callback {
private final ItemTouchHelperAdapter mAdapter;
public ItemTouchHelperCallback(ItemTouchHelperAdapter adapter) {
mAdapter = adapter;
}
@Override
public boolean isLongPressDragEnabled() {
return true;
}
@Override
public boolean isItemViewSwipeEnabled() {
return true;
}
@Override
public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN;
int swipeFlags = ItemTouchHelper.START | ItemTouchHelper.END;
return makeMovementFlags(dragFlags, swipeFlags);
}
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
mAdapter.onItemMove(viewHolder.getAdapterPosition(),target.getAdapterPosition());
return true;
}
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
mAdapter.onItemDismiss(viewHolder.getAdapterPosition());
}}
最后创建实现之前创建的 ItemTouchHelperAdapter 的 FirebaseRecyclerAdapter:
public class PurchaseListAdapter extends FirebaseRecyclerAdapter<Purchase, PurchaseListHolder> implements ItemTouchHelperAdapter {
public PurchaseListAdapter(Class<Purchase> modelClass, int modelLayout, Class<PurchaseListHolder> viewHolderClass, Query ref) {
super(modelClass, modelLayout, viewHolderClass, ref);
}
@Override
protected void populateViewHolder(PurchaseListHolder viewHolder, final Purchase model, final int position) {
viewHolder.mName.setText(model.getName());
}
@Override
protected void onChildChanged(ChangeEventListener.EventType type, int index, int oldIndex) {
super.onChildChanged(type, index, oldIndex);
}
@Override
public boolean onItemMove(int fromPosition, int toPosition) {
// TODO: Add functionality for swapping items in FirebaseDatabase
return true;
}
@Override
public void onItemDismiss(int position) {
getRef(position).removeValue();
}}
“滑动关闭”(onItemDismiss)的功能非常有效。但我不知道如何实现 onItemMove 功能。理想情况下,它应该在 Firebase 数据库中滑动项目,但我没有找到办法。
也许有人知道为 RecyclerView 实现“滑动解雇”和“药物和丢弃”功能的任何其他方式,这将与 Firebase 一起使用?