android - Filtering SPINNER for XML data that had been retrieved -
i code url sources(xml data) how should that? i'm able retrieve data source list view. however, couldn't filtered.
example: spinner : "today","tomorrow" upon select "today" show out events today. upon select "tomorrow" show out events tomorrow.
can me out?
i've tried out coding, however, met error.
i xml data here:
<start_time>2013-09-25 09:00:00 </start_time>
![screenshot of xml][1]
here java code:
public class androidxmlparsingactivity extends listactivity implements onitemselectedlistener { string[] browseby; date d = new date(); string[] dates = { "today", "tomorrow", "next week", }; arraylist<string> browse = new arraylist<string>(); arraylist<string> mpostingdata = new arraylist<string>(); spinner s1; listview listview; customadapter cus; // static variables static final string url = "http://api.eventful.com/rest/events/search?app_key=42t54cx7rbrdfczc&location=singapore"; // xml node keys static final string key_event = "event"; // parent node static final string key_title = "title"; static final string key_start_time = "start_time"; @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); arraylist<hashmap<string, string>> menuitems = new arraylist<hashmap<string, string>>(); xmlparser parser = new xmlparser(); string xml = parser.getxmlfromurl(url); // getting xml document doc = parser.getdomelement(xml); // getting dom element nodelist nl = doc.getelementsbytagname(key_event); // looping through item nodes <item> (int = 0; < nl.getlength(); i++) { // creating new hashmap hashmap<string, string> map = new hashmap<string, string>(); element e = (element) nl.item(i); // adding each child node hashmap key => value map.put(key_title, parser.getvalue(e, key_title)); map.put(key_start_time, parser.getvalue(e, key_start_time)); // adding hashlist arraylist menuitems.add(map); } // adding menuitems listview listadapter adapter = new simpleadapter(this, menuitems, r.layout.list_item, new string[] { key_title,key_start_time }, new int[] { r.id.title, r.id.starttime }); setlistadapter(adapter); // selecting single listview item listview lv = getlistview(); lv.setonitemclicklistener(new onitemclicklistener() { @override public void onitemclick(adapterview<?> parent, view view, int position, long id) { // getting values selected listitem string title = ((textview) view.findviewbyid(r.id.title)) .gettext().tostring(); // starting new intent intent in = new intent(getapplicationcontext(), singlemenuitemactivity.class); in.putextra(key_title, title); startactivity(in); } }); listview = (listview) findviewbyid(r.id.listview1); s1 = (spinner) findviewbyid(r.id.spinner1); (int = 0; < browseby.length; i++) { browse.add(browseby[i]); } // aa = new // arrayadapter<string>(this,android.r.layout.simple_list_item_1,category); s1.setonitemselectedlistener(this); mpostingdata = browse; (int = 0; < mpostingdata.size(); i++) { if (mpostingdata.size() > 0) log.i("datas", mpostingdata.get(i)); } cus = new customadapter(this, 0); setlistadapter(cus); arrayadapter<string> aa = new arrayadapter<string>(this, android.r.layout.simple_spinner_item, dates); aa.setdropdownviewresource(android.r.layout.simple_spinner_dropdown_item); s1.setadapter(aa); } public void onitemselected(adapterview<?> parent, view v, int position, long id) { // listview.setfiltertext(category[position]); string text = s1.getselecteditem().tostring(); cus.getfilter().filter(text); cus.notifydatasetchanged(); } public void onnothingselected(adapterview<?> parent) { // listview.setfiltertext(""); } public void onlistitemclick(listview parent, view v, int position, long id) { toast.maketext(this, "you have selected " + mpostingdata.get(position), toast.length_short).show(); } class customadapter extends arrayadapter<string> { public void setdata(arraylist<string> mppst) { mpostingdata = mppst;// contains class items data. } @override public filter getfilter() { return new filter() { @override protected void publishresults(charsequence constraint, filterresults start_time) { if (start_time != null && start_time.count >= 0) { setdata((arraylist<string>) start_time.values); } else { setdata(browse);// set original values } notifydatasetinvalidated(); } @override protected filterresults performfiltering(charsequence constraint) { filterresults result = new filterresults(); if(constraint=="today") { constraint = constraint.tostring(); charsequence s = dateformat.format("yyyy-mm-dd ", d.gettime()); arraylist<string> founditems = new arraylist<string>(); if (browse != null) { (int = 0; < browse.size(); i++) { if (browse.get(i).contains(s)){ system.out.println("my datas" + browse.get(i)); founditems.add(browse.get(i)); } else { } } } result.count = founditems.size();// search results found // return count result.values = founditems;// return values } else { result.count = -1;// no search results found } return result; } }; } layoutinflater minflater; public customadapter(context context, int textviewresourceid) { super(context, textviewresourceid); // todo auto-generated constructor stub minflater = (layoutinflater) context .getsystemservice(context.layout_inflater_service); } @override public int getcount() { // todo auto-generated method stub return mpostingdata.size(); } @override public long getitemid(int position) { // todo auto-generated method stub return position; } @override public view getview(int position, view convertview, viewgroup parent) { // todo auto-generated method stub viewholder vh; if (convertview == null) { vh = new viewholder(); convertview = minflater.inflate(r.layout.row, null); vh.t1 = (textview) convertview.findviewbyid(r.id.textview1); convertview.settag(vh); } else { // viewholder fast access textview // , imageview. vh = (viewholder) convertview.gettag(); } if (mpostingdata.size() > 0) vh.t1.settext(mpostingdata.get(position)); return convertview; } } static class viewholder { textview t1; } }
i rather create database , put data in it. through correct use of sql, php , json parsing, able correct data. suggesting use database, since data can manipulated in better way through sql.
for example getting events current date , sorting them done through sql query statement. following tutorial should give kickstart:
Comments
Post a Comment