Mein Hauptziel besteht darin, ein RecyclerView-Element basierend auf früheren Aktionen eines Benutzers als "Favoriten" festzulegen. Ich kann diese Daten beim Klicken speichern und löschen, aber ich habe Schwierigkeiten, sie zur richtigen Zeit am richtigen Ort anzuzeigen.RecyclerView-Daten von zwei verschiedenen Firebase-Knoten abrufen und einstellen
Ich habe zwei verschiedene Knoten, die ich für diese Verwendung geschehen:
"quotes" : {
"0" : {
"Name" : "Foo",
"Source" : "Bar" },
"1" : {
"Name" : "Foo",
"Source" : "Bar" },
"2" : {
"Name" : "Foo",
"Source" : "Bar" }
},
"favorites" : {
"[email protected],com" : {
"uid0" : "0"
"uid1" : "2" }}}
Also im Grunde, was ich zu tun werde versuchen: alle Zitate in einem RecyclerView anzeigen, und wenn ihre IDs zeigen in den Favoriten für diesen einzigartigen Benutzer, legen Sie es visuell als Favorit fest. Ich habe hier einen Code eingefügt, der für mich nicht funktioniert.
private void bindHeart(final ItemHeartCardBinding binding) {
if (inProgress) {
animateProgress(binding);
} else {
binding.favorite.setImageResource(R.drawable.favorite_state_list);
}
//Loop through users favorites to see if current item exists
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
DatabaseReference mRootRef = FirebaseDatabase.getInstance().getReference();
String email = "";
if (user != null) {
email = user.getEmail();
email = email.replace(".", ",");
}
final DatabaseReference favoriteRef = mRootRef.child("favorites/" + email);
//quoteKeyStringResId is passed in here as each RecyclerView item is being created. It's the uid of each quote.
final Query queryRef = favoriteRef.orderByValue().startAt(quoteKeyStringResId).endAt(quoteKeyStringResId);
queryRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.getValue().toString().equals(quoteKeyStringResId)) {
binding.favorite.setChecked(checked);
} else {
binding.favorite.setChecked(!checked);
}
}