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(); } }
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
Post a Comment