firebase database - Android Recyclerview, loading images from URls using Glide -
i able retrieve text data firebase, got difficulty in doing same images. using recycler view , below recycler adapter:
public class recyclerviewadapter extends recyclerview.adapter<recyclerviewadapter.myholder>{ list<listdata> listdata; public recyclerviewadapter(list<listdata> listdata) { this.listdata = listdata; } @override public myholder oncreateviewholder(viewgroup parent, int viewtype) { view view = layoutinflater.from(parent.getcontext()).inflate(r.layout.myview,parent,false); myholder myholder = new myholder(view); return myholder; } public void onbindviewholder(myholder holder, int position) { listdata data = listdata.get(position); holder.vname.settext(data.getname()); holder.vemail.settext(data.getemail()); holder.vaddress.settext(data.getaddress()); } @override public int getitemcount() { return listdata.size(); } class myholder extends recyclerview.viewholder{ textview vname , vaddress,vemail; imageview thumbnail; public myholder(view itemview) { super(itemview); vname = (textview) itemview.findviewbyid(r.id.vname); thumbnail = (imageview) itemview.findviewbyid(thumbnail); vemail = (textview) itemview.findviewbyid(r.id.vemail); vaddress = (textview) itemview.findviewbyid(r.id.vaddress); } } } and here activity code initialises process:
myref.addvalueeventlistener(new valueeventlistener() { @override public void ondatachange(datasnapshot datasnapshot) { list = new arraylist<>(); // stringbuffer stringbuffer = new stringbuffer(); for(datasnapshot datasnapshot1 :datasnapshot.getchildren()){ userdetails userdetails = datasnapshot1.getvalue(userdetails.class); listdata listdata = new listdata(); string name=userdetails.getname(); string email=userdetails.getemail(); string address=userdetails.getaddress(); listdata.setname(name); listdata.setemail(email); listdata.setaddress(address); list.add(listdata); // toast.maketext(mainactivity.this,""+name,toast.length_long).show(); } recyclerviewadapter recycler = new recyclerviewadapter(list); recyclerview.layoutmanager layoutmanager = new linearlayoutmanager(investmentdrawer.this); recyclerview.setlayoutmanager(layoutmanager); recyclerview.setitemanimator( new defaultitemanimator()); recyclerview.setadapter(recycler); } @override public void oncancelled(databaseerror error) { // failed read value // log.w(tag, "failed read value.", error.toexception()); } }); glide.with(this) .load(imagedata) .diskcachestrategy(diskcachestrategy.all) .into(ivimgglide); } i use url entered in database load images dynamically. using glide or picasso. below listdata class
public class listdata { public string name; public string address; public string email; public string imageurl; public string getimageurl() { return imageurl; } public void setimageurl(string imageurl) { this.imageurl = imageurl; } public string getname() { return name; } public void setname(string name) { this.name = name; } public string getaddress() { return address; } public void setaddress(string address) { this.address = address; } public string getemail() { return email; } public void setemail(string email) { this.email = email; } }
you can use picasso or glide inside onbindviewholder
public class recyclerviewadapter extends recyclerview.adapter<recyclerviewadapter.myholder>{ list<listdata> listdata; context context; public recyclerviewadapter(list<listdata> listdata,context context) { this.listdata = listdata; this.context = context; } @override public myholder oncreateviewholder(viewgroup parent, int viewtype) { view view = layoutinflater.from(parent.getcontext()).inflate(r.layout.myview,parent,false); myholder myholder = new myholder(view); return myholder; } public void onbindviewholder(myholder holder, int position) { listdata data = listdata.get(position); holder.vname.settext(data.getname()); holder.vemail.settext(data.getemail()); holder.vaddress.settext(data.getaddress()); glide.with(context) .load(data.getimageurl()) .diskcachestrategy(diskcachestrategy.all) .into(holder.thumbnail); //with picasso picasso.with(context) .load(data.getimageurl()) .into(holder.thumbnail); // need define method getimageurl() image url in listdata } @override public int getitemcount() { return listdata.size(); } class myholder extends recyclerview.viewholder{ textview vname , vaddress,vemail; imageview thumbnail; public myholder(view itemview) { super(itemview); vname = (textview) itemview.findviewbyid(r.id.vname); thumbnail = (imageview) itemview.findviewbyid(thumbnail); vemail = (textview) itemview.findviewbyid(r.id.vemail); vaddress = (textview) itemview.findviewbyid(r.id.vaddress); } } } remember need pass context parent activity adapter
in ondatachanged need set image url using setimageurl()
@override public void ondatachange(datasnapshot datasnapshot) { list = new arraylist<>(); // stringbuffer stringbuffer = new stringbuffer(); for(datasnapshot datasnapshot1 :datasnapshot.getchildren()){ userdetails userdetails = datasnapshot1.getvalue(userdetails.class); listdata listdata = new listdata(); string name=userdetails.getname(); string email=userdetails.getemail(); string address=userdetails.getaddress(); string imageurl = userdetails.getimageurl(); listdata.setname(name); listdata.setemail(email); listdata.setaddress(address); listdata.setimageurl(imageurl); list.add(listdata); // toast.maketext(mainactivity.this,""+name,toast.length_long).show(); } recyclerviewadapter recycler = new recyclerviewadapter(list,getapplicationcontext()); recyclerview.layoutmanager layoutmanager = new linearlayoutmanager(investmentdrawer.this); recyclerview.setlayoutmanager(layoutmanager); recyclerview.setitemanimator( new defaultitemanimator()); recyclerview.setadapter(recycler); }
Comments
Post a Comment