java - RecyclerView Not Displaying Data Received -


i getting data firebase (online data storage) somehow in adapter class, dataset []. when pass in 20 random things using same class, works perfectly. here code.

fragment class:

@override public void oncreate(bundle savedinstancestate) {     super.oncreate(savedinstancestate);     myfirebaseref = new firebase("http...");     initlistitems(); }    @override public view oncreateview(layoutinflater inflater, viewgroup container,                          bundle savedinstancestate) {     view rootview = inflater.inflate(r.layout.fragment_products, container, false);     // inflate layout fragment     mrecyclerview = (recyclerview) rootview.findviewbyid(r.id.list);     mrecyclerview.setlayoutmanager(new linearlayoutmanager(getactivity().getapplicationcontext()));      madapter = new myadapter(mdataset);     mrecyclerview.setadapter(madapter);       return rootview;  } // data firebase , set list private void initlistitems() {      // attach listener read data @ our posts reference     myfirebaseref.addvalueeventlistener(new valueeventlistener() {         @override         public void ondatachange(datasnapshot snapshot) {             system.out.println("there " + snapshot.getchildrencount() + "children");              (datasnapshot postsnapshot : snapshot.getchildren()) {                  title = postsnapshot.child("name").getvalue().tostring();                 description = postsnapshot.child("description").getvalue().tostring();                 location = postsnapshot.child("location").getvalue().tostring();                 //this displays information reading data in                 system.out.println("title: " + title  +                         "description" + description + "location" + location);                  mdataset.add(new listitem(title, description, location, 0.00, 0.00));               }          }     });     // if remove above code , put this, recycleview displays information     (int = 0; i<20; i++) {         string name ="this element #" + i;         mdataset.add(new listitem(name, "description", "location", 0.00, 0.00));     } } 

adapter class:

public class myadapter extends recyclerview.adapter<myadapter.viewholder> {     private static final string tag = "myadapter";     private list<listitem> mdataset;     /**      * provide reference type of views using (custom viewholder)      */     public static class viewholder extends recyclerview.viewholder {         private final textview textview;         private final imageview imageview;         private final textview textviewlocation;          public viewholder(view v) {             super(v);             // define click listener viewholder's view.             v.setonclicklistener(new view.onclicklistener() {                 ...             });             textview = (textview) v.findviewbyid(r.id.startupname);             textviewlocation = (textview) v.findviewbyid((r.id.startuplocation));             imageview = (imageview) v.findviewbyid(r.id.startupimage);         }          public textview gettextview() {             return textview;         }         public textview gettextviewlocation() {             return textviewlocation;         }         public imageview getimageview() {             return imageview;         }      }    //    when try send data received firebase, prints out [ ] if use random data created, works               public myadapter(list<listitem> dataset) {         system.out.println("the dataset " + dataset);         mdataset = dataset;     }      // create new views (invoked layout manager)     @override     public viewholder oncreateviewholder(viewgroup viewgroup, int viewtype) {         // create new view.         view v = layoutinflater.from(viewgroup.getcontext())                 .inflate(r.layout.row_item, viewgroup, false);          return new viewholder(v);     }      // replace contents of view (invoked layout manager)     @override     public void onbindviewholder(viewholder viewholder, final int position) {         log.d(tag, "element " + position + " set.");          // element dataset @ position , replace contents of view element         ...      }      // return size of dataset (invoked layout manager)     @override     public int getitemcount() {         return mdataset == null ? 0 : mdataset.size();     } } 

this picture of recyclerview random data

this picture of recyclerview data firebase

does have idea why happening, why data firebase not showing up?

thanks

in oncreate asynchronously go data - might take time. in meantime program flow moves along , set recycler in oncreateview, happens before response data, , result mdataset still without values. while after result , put in mdataset, don't see place notify recyclerview change.

so either have defer setting recyclerview until after results or notify recyclerview data set update once it.


Comments