firebase - How to use a FirebaseRecyclerAdapter with a dynamic reference in Android? -


this question has answer here:

i know how use firebaserecycleradapter on list of items in firebase. know how firebase data multiple locations using indices. not know how combine firebaserecycleradapter.

i have simple data structure users can friends:

"users": {   "user1": {     "name": "name",     "friends": {       "user2": "true"       }     }   "user2": {     "name": "name",     "friends": {       "user1": "true"       }     }   } 

i use unique ids usernames. in simple example, user 1 , user 2 friends. want do, list of names (and later maybe more) using firebaserecycleradapter. normally, list obtaining user id's under "friends" , using id's navigate names. in java, this:

firebase ref = new firebase("<reference>"); ref.child("users/user1/friends").addlistenerforsinglevalueevent(new valueeventlistener() {   @override   public void ondatachange(datasnapshot snapshot) {     string userid = snapshot.getkey();     ref.child("users/" + userid + "/name").addlistenerforsinglevalueevent(new valueeventlistener() {       @override       public void ondatachange(datasnapshot snapshot) {         system.out.println(snapshot.getvalue());       }       @override       public void oncancelled(firebaseerror firebaseerror) {         // here       }     });   } }); 

but when using firebaserecycleradapter, define 1 url. adapter make list based on items in single place.

is there way adjust adapter reads data multiple places, same way example above does? or there way make dynamic ref variable points user id's stored in current user "friends" list? thinking using equals() method, cannot figure out how exactly.

another way storing user names in "friends" list. not improve data structure. have change names in 2 places every time (and maybe photo's later on) , introduce more redundancy.

does have solution problem? not find answer anywhere seems common pattern. , apart making work, how do efficiently?

you'll need join data, attaching addlistenerforsinglevalueevent().

firebaserecyclerviewadapter<boolean, itemviewholder> adapter = new firebaserecyclerviewadapter<boolean, itemviewholder>(     boolean.class, android.r.layout.two_line_list_item, itemviewholder.class, friendsref){     protected void populateviewholder(final itemviewholder viewholder, boolean model, int position) {         string key = this.getref(position).getkey();         ref.child("users").child(key).addlistenerforsinglevalueevent(new valueeventlistener() {             public void ondatachange(datasnapshot datasnapshot) {                 string name = datasnapshot.child("name").getvalue(string.class);                 ((textview)viewholder.itemview.findviewbyid(android.r.id.text1)).settext(name);             }              public void oncancelled(firebaseerror firebaseerror) { }         });     } }; 

i've added activity activity36235919 demonstrate this sample repo.

after making work realized i'd answered before in coupling firebaserecyclerviewadapter boolean/string map.entry, i'll mark question duplicate.


Comments