使用滑动删除Firebase对象

时间:2017-03-07 22:54:26

标签: android firebase firebase-realtime-database swipe android-viewholder

我希望在Swipe左侧从Firebase中删除一个对象。

表示,现在所有功能都可以通过滑动完成,并且可以从视图中删除。但是它会保留在数据库中。

我已将以下内容添加到我的onCreate:

ItemTouchHelper.SimpleCallback simpleItemTouchCallback = new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT) {

    @Override
    public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
        return false;
    }

    @Override
    public void onSwiped(RecyclerView.ViewHolder viewHolder, int swipeDir) {
        Toast.makeText(ListBox.this, "Item removed", Toast.LENGTH_SHORT).show();
        //Remove swiped item from list and notify the RecyclerView
    }
};

这就是我填充ViewHolder的方式。

@Override
        protected void populateViewHolder(final BoxViewHolder viewHolder, final Box model, int position) {

            viewHolder.setTitle(model.getTitle());
            final String boxUniqueKey = model.getBoxkey();

            final DatabaseReference postRef = getRef(position);
            final String postKey = postRef.getKey();

            viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    // Launch BoxItem view
                    final Intent intent = new Intent(ListBox.this, AddBoxItem.class);

                    String boxkey = model.getBoxkey();
                    String boxName = model.getTitle();

                    startActivity(intent);

                    ItemTouchHelper itemTouchHelper = new ItemTouchHelper(simpleItemTouchCallback);
                    itemTouchHelper.attachToRecyclerView(allBoxes);

                }
            });
        }

但我如何(以及在​​何处)获取该项目的位置,以及如何将删除查询发送到Firebase数据库?

1 个答案:

答案 0 :(得分:3)

我编写的代码与您要实现的内容非常相似。这是你可以实现的一种方式。

首先,扩展ItemTouchHelper.SimpleCallback类以创建自己的自定义类。

public class SwipeToDeleteCallback extends ItemTouchHelper.SimpleCallback {

private RecyclerAdapter adapter; // this will be your recycler adapter

private DatabaseReference root = FirebaseDatabase.getInstance().getReference();

/**
 * 
  Make sure you pass in your RecyclerAdapter to this class

 */
public CallBack(int dragDirs, int swipeDirs, RecyclerAdapter adapter) {
    super(dragDirs, swipeDirs);
    this.adapter = adapter;
}

@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
    return false;
}

@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
    int position = viewHolder.getAdapterPosition(); // this is how you can get the position
    Object object = adapter.getObject(position); // You will have your own class ofcourse.

    // then you can delete the object
     root.child("Object").child(object.getId()).setValue(null);// setting the value to null will just delete it from the database.

}

调用viewHolder.getAdapterPosition()将返回适配器中视图的位置。您可以使用此职位从回收站适配器中包含的Object获取ArrayList

在我的适配器中,我创建了一个getObject方法。这只是从我的适配器的ArrayList返回对象。获得该对象后,我可以调用相关的Firebase实时数据库方法并删除该对象。在我的Object类中,我将唯一键存储在对象中,以便我可以轻松删除它。我通过调用getId()获得唯一ID。我将其传递给关联的Firebase实时数据库方法,并将值设置为null,删除它。

执行此操作后,您可以将其添加到您的回收站视图中。

ItemTouchHelper.SimpleCallback swipeToDeleteCallback = new
            SwipeToDeleteCallback(0, ItemTouchHelper.RIGHT, choreRecyclerAdapter, getContext()); // Making the SimpleCallback

    ItemTouchHelper touchHelper = new ItemTouchHelper(swipeToDeleteCallback);

    touchHelper.attachToRecyclerView(recyclerView); // then attach it to your recycler view

首先,您进行简单的回调并确保实例化您扩展的自定义类。务必通过您的回收适配器。

注意我只通过传递ItemTouchHelper.Right来支持正确的滑动。您可以左右支持左侧或右侧。

然后创建一个ItemTouchHelper对象并将其传递给您简单的回调。

最后,您将触摸辅助工具附加到您的回收商视图中。