2

我希望在左側滑動時從Firebase中刪除對象。一切正常,現在使用滑動,它從視圖中刪除,但它保留在數據庫中。使用滑動功能刪除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數據庫?

+0

你可以在'onSwipe'內給或投射到'BoxViewHolder'。但是,您將需要存儲的數據的ID或位置作爲BoxViewHolder的一部分 –

回答

1

我編寫了一些非常類似於你想要實現的東西。這是你可以實現的一種方式。首先擴展ItemTouchHelpet.SimpleCallback類以創建您自己的自定義類。

public class CallBack 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()返回視圖在適配器中的位置。您可以使用此位置從您的回收站適配器中包含的ArrayList中獲取對象。

在我的適配器中,我創建了一個getObject方法。這只是從我的適配器所具有的ArrayList中返回對象。一旦我有了這個對象,我就可以調用Firebase並刪除這個對象。在我的對象類中,我在對象中存儲了唯一鍵,以便我可以輕鬆地將其刪除。我通過調用getId()來獲得唯一的ID。我將此傳遞給Firebase並將其值設置爲空,並將其刪除。

做完這些之後,您可以將它添加到像這樣的回收站視圖中。

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

    ItemTouchHelper touchHelper = new ItemTouchHelper(simpleItemTouchCallback); 

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

首先,你做一個簡單的回調,並確保你實例化你擴展的自定義類。一定要通過你的回收站適配器。注意我只支持通過傳遞ItemTouchHelper.Right右滑動。你可以支持左側或左右傳遞。然後創建一個ItemTouchHelper對象並將其傳遞給您的簡單回調。然後,您將觸控助手連接到您的回收商視圖,就這些了。

+0

謝謝!這正是我想要的! –