Ich habe folgende Datenbankstruktur in Firebase. Es ist eine ziemlich normale Art, Benutzer und ihre Daten in der Datenbank zu verwalten. Ich nutze auch FirebaseRecyclerAdapter
in FirebaseUI.Hinzufügen von Daten an bestimmten Speicherort in Firebase-Datenbank
Jetzt möchte ich Swipe zu löschen/rückgängig machen Funktion implementieren. Für den Swipe, um Teil zu löschen, hatte ich implementiert ItemTouchHelper.SimpleCallback
Methode, um onSwiped
Status zu fangen. In der Callback aktualisiere ich einfach die Datenbank
mFirebaseAdapter.getRef(indexOfDeletedItem).removeValue();
Auf diese Weise verwendet wird, wurde die Swiped Artikel sofort in der Datenbank entfernt. Jedoch, wenn ich versuche, es wieder herzustellen. Ich kann nicht einfügen, wo es war. Zum Beispiel
@Override
public void onSwiped(final RecyclerView.ViewHolder viewHolder, int direction) {
//get the location of swiped item.
final int indexOfDeletedItem = viewHolder.getAdapterPosition();
//I cached the item in case I need to restore it.
final ITEM deletedItem = mFirebaseAdapter.getItem(indexOfDeletedItem);
//remove the item on swipe
mFirebaseAdapter.getRef(indexOfDeletedItem).removeValue();
Snackbar.make(findViewById(R.id.myCoordinatorLayout), "Deleted Item", Snackbar.LENGTH_LONG)
.setAction("UNDO", new View.OnClickListener() {
@Override
public void onClick(View v) {
//When user want to restored the deleted item
//I need to add the deleted data back to database.
mFirebaseAdapter.getRef(indexOfDeletedItem).push()setValue(deletedItem);
}
}).show();
}
Ich bin richtig nicht in der Lage einfügen (add) die Daten in bestimmten Ort ohne es zu überschreiben. bekam Ich denke, der Index des Artikels sofort aktualisiert, nachdem ich mFirebaseAdapter.getRef(indexOfDeletedItem).removeValue();
Zum Beispiel genannt, für user1
Ich habe item0
mit Index 0
,
item1
mit Index 1
und
item2
mit Index 2
index 0 1 2
item0 --> item1 --> item2 //now swipe on item1
item0 --> item2 //now user click undo
item0 --> item1 //item2 gets overwritten
, wenn es eine Möglichkeit, es zu machen, zurück zu
item0 --> item1 --> item2
In meinem Fall habe ich die Daten auf indexOfDeletedItem
immer überschrieben.
Ich bin auf der Suche nach einer API, um den Knoten zurück in die Datenbank einfügen, ohne es zu überschreiben. Mit anderen Worten: Wie kann ich den Knoten (item1) dorthin schieben, wo er vorher war?
Ich bin nicht sicher, was Sie über Insert vs Überschreiben in dieser Frage bedeuten. Können Sie die Frage bearbeiten, um deutlicher zu machen, was Sie tun möchten und was tatsächlich passiert? –
Ich füge nur ein Beispiel hinzu, ich hoffe, das hilft. :) –