android - How to create View with xml layout programmatically inside fragment? -
i have layout , need create many views add tham gridlayout inside fragment.
i have now:
arraylist<tables> tables; arraylist<view> tablelist = new arraylist<>(); tables = parsedarray.get(0).gettables(); gridlayout gridlayout = (gridlayout) getview().findviewbyid(r.id.grid_layout); (int = 0; < tables.size(); i++) { tablelist.add(getview().findviewbyid(r.id.table_layout)); //textview textview = (textview) tablelist.get(i).findviewbyid(r.id.table_number); //textview.settext(tables.get(i).gettablenumber()); gridlayout.spec row = gridlayout.spec(i / 5); gridlayout.spec col = gridlayout.spec(i); gridlayout.layoutparams params = new gridlayout.layoutparams(row, col); gridlayout.addview(tablelist.get(i), i, params); } }
but wrong way, need find out how create new views , add them list, in state think im tring make reference same view, couz have type of error:
cannot add null child view viewgroup
fragment code:
public static class tablesfragment extends fragment { private volleysinglton volleysinglton; private requestqueue requestqueue; public static tablesfragment getinstance(int position) { tablesfragment mytablesfragment = new tablesfragment(); bundle args = new bundle(); args.putint("position", position); mytablesfragment.setarguments(args); return mytablesfragment; } @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { view layout = inflater.inflate(r.layout.fragment_1, container, false); gridlayout gridlayout = (gridlayout) layout.findviewbyid(r.id.grid_layout); volleysinglton = volleysinglton.returninstance(); requestqueue = volleysinglton.getrequestqueue(); jsonobjectrequest jsonobjectrequest = new jsonobjectrequest(request.method.get, url, (string) null, new response.listener<jsonobject>() { @override public void onresponse(jsonobject response) { arraylist<roomsclass> parsedarray = parseroomsresponse(response); updateviews(parsedarray); } }, new response.errorlistener() { @override public void onerrorresponse(volleyerror error) { if (error instanceof timeouterror) { } } }); requestqueue.add(jsonobjectrequest); return layout; } private void updateviews(arraylist<roomsclass> parsedarray) { // extract relevant data array if (parsedarray == null || parsedarray.isempty()) { } else { arraylist<tables> tables; arraylist<view> tablelist = new arraylist<>(); tables = parsedarray.get(0).gettables(); gridlayout gridlayout = (gridlayout) getview().findviewbyid(r.id.grid_layout); (int = 0; < tables.size(); i++) { tablelist.add(getview().findviewbyid(r.id.table_layout)); //textview textview = (textview) tablelist.get(i).findviewbyid(r.id.table_number); //textview.settext(tables.get(i).gettablenumber()); gridlayout.spec row = gridlayout.spec(i / 5); gridlayout.spec col = gridlayout.spec(i); gridlayout.layoutparams params = new gridlayout.layoutparams(row, col); gridlayout.addview(tablelist.get(i), i, params); } } // replace place holders in relevant views } @override public void onviewcreated(view view, bundle savedinstancestate) { super.onviewcreated(view, savedinstancestate); } @override public void onresume() { super.onresume(); } public interface volleycallback { void onsuccess(arraylist<roomsclass> result); } private arraylist<roomsclass> parseroomsresponse(jsonobject response) { arraylist<roomsclass> roomsarray = new arraylist<>(); try { jsonarray rooms = response.getjsonarray("rooms"); (int = 0; < rooms.length(); i++) { jsonobject currentroom = rooms.getjsonobject(i); roomsclass room = new roomsclass(); room.setroomid(currentroom.getint("room_id")); room.setroomlabel(currentroom.getstring("label")); jsonarray tables = currentroom.getjsonarray("tables"); (int j = 0; j < tables.length(); j++) { jsonobject currenttable = tables.getjsonobject(j); room.addtable(currenttable.getint("table_id"), currenttable.getint("table_number")); } roomsarray.add(room); } } catch (jsonexception e) { toast.maketext(getactivity(), e.tostring(), toast.length_long).show(); } return roomsarray; } }
there may more issues cuz i'm editing right now.
i make chaneges:
view view = getactivity().getlayoutinflater().inflate(r.layout.table_layout, gridlayout, false); tablelist.add(view);
and when im trying add views thing go ok.
p.s. dont close question yet, couz there mb troubles.
Comments
Post a Comment