multithreading - Asynchronously add views to fragment in Android -
i trying create fragment @ beginning show progressbar, other thread call function bring information (the information brought remote server - takes few seconds) populate views added fragment. have tried add views fragment got exception can't change ui on threads not on main thread. run on ui thread, here problem ui stacked until moment information brought server.
here code:
public class mainsalepage extends sherlockfragment { protected view manesalepage; protected list<saleobj> salelist; protected int numberofsalesonscreen; protected linearlayout saleconteiner; @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { manesalepage = inflater.inflate(r.layout.main_page_fragment, container, false); numberofsalesonscreen = 0; saleconteiner = (linearlayout) manesalepage.findviewbyid(r.id.salescontainer); getactivity().runonuithread(new runnable() { @override public void run() { saleservice saleservice = new saleservice(); salelist = saleservice.getnextsales(numberofsalesonscreen); //the operation takes time. for(int = 0; < salelist.size(); i++) { salerow salerow = new salerow(getactivity()); salerow.populatewith(salelist.get(i)); saleconteiner.addview(salerow); } } }); return manesalepage; } }
how can show fragment , not stack ui till point data server?
thanks!
try work, not cleanest solution, correct code not write new 1 sketch can see did make mistake
edit: in chat vlad solution guide helped him
@override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { manesalepage = inflater.inflate(r.layout.main_page_fragment, container, false); manesalepage.postdelayed(new runnable() { @override public void run() { addcontainer(); } } }, 1000); return manesalepage; } private void addcontainer(){ numberofsalesonscreen = 0; saleconteiner = (linearlayout) manesalepage.findviewbyid(r.id.salescontainer); saleservice saleservice = new saleservice(); salelist = saleservice.getnextsales(numberofsalesonscreen); //the operation takes time. for(int = 0; < salelist.size(); i++) { getactivity().runonuithread(new runnable() { @override public void run() { salerow salerow = new salerow(getactivity()); salerow.populatewith(salelist.get(i)); saleconteiner.addview(salerow); } }); } }
you sending of them @ once, , way send 1 one
edit: don't forget going create n = salelist.size() threads @ once.
hope helps , enjoy work
Comments
Post a Comment