java - Dynamically add items to list view using custom adapter for Android app -
so, right have custom adapter class takes in array of locations , adds them listview. fine , dandy, add locations listview after initialization. example, can "add location" , add listview. here main activity:
package com.example.listviewtest; import android.app.activity; import android.os.bundle; import android.view.view; import android.widget.listview; public class mainactivity extends activity { private listview listview1; @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); location location_data[] = new location[] { new location(r.drawable.ic_launcher, "location 1", "fruit!", "2 miles", "8-4 mon-fri\nclosed sun"), new location(r.drawable.ic_launcher, "location 2", "veggies!", "2 miles", "8-5"), new location(r.drawable.ic_launcher, "location 3", "plants!", "2 miles", "8-5"), new location(r.drawable.ic_launcher, "location 4", "flowers!", "2 miles", "8-5"), new location(r.drawable.ic_launcher, "location 5", "baked goods!", "2 miles", "8-5") }; locationadapter adapter = new locationadapter(this, r.layout.listview_item_row, location_data); //adapter.add(new location(r.drawable.ic_launcher, "location 6", "veggies!", "2 miles", "8-5")); listview1 = (listview)findviewbyid(r.id.listview1); view header = (view)getlayoutinflater().inflate(r.layout.listview_header_row, null); listview1.addheaderview(header); listview1.setadapter(adapter); } }
this works. want adapter.add(new location(r.drawable.ic_launcher, "location 6", "veggies!", "2 miles", "8-5"));
after filling array.
here locationadapter class:
package com.example.listviewtest; import android.app.activity; import android.content.context; import android.view.layoutinflater; import android.view.view; import android.view.viewgroup; import android.widget.arrayadapter; import android.widget.imageview; import android.widget.textview; public class locationadapter extends arrayadapter<location>{ context context; int layoutresourceid; location data[] = null; public locationadapter(context context, int layoutresourceid, location[] data) { super(context, layoutresourceid, data); this.layoutresourceid = layoutresourceid; this.context = context; this.data = data; } @override public view getview(int position, view convertview, viewgroup parent) { view row = convertview; locationholder holder = null; if(row == null) { layoutinflater inflater = ((activity)context).getlayoutinflater(); row = inflater.inflate(layoutresourceid, parent, false); holder = new locationholder(); holder.imgicon = (imageview)row.findviewbyid(r.id.imgicon); holder.txttitle = (textview)row.findviewbyid(r.id.txttitle); holder.details = (textview)row.findviewbyid(r.id.details); holder.distance = (textview)row.findviewbyid(r.id.distance); holder.hours = (textview)row.findviewbyid(r.id.hours); row.settag(holder); } else { holder = (locationholder)row.gettag(); } location location = data[position]; holder.txttitle.settext(location.title); holder.imgicon.setimageresource(location.icon); holder.details.settext(location.details); holder.distance.settext(location.distance); holder.hours.settext(location.hours); return row; } static class locationholder { imageview imgicon; textview txttitle; textview details; textview distance; textview hours; } }
any ideas on how can implement this? thanks.
- in adapter change locations data[] array arraylist , override appropriate constructor
- in activity, make variable data field (type arraylist
- when add location can use data.add(location)
- then can call notifydatasetchanged() on adapter
example code: http://androidadapternotifiydatasetchanged.blogspot.in/
Comments
Post a Comment