database - Android listview filter without pressing search button issue -
i have listview work fine. have put edittext @ top of listview. want when enters letter "a", names starting "a" should appear in list . have try nothing happen please check code , tell me doing wrong.
this code of data list.
public class datalistactivity extends activity { listview listview; sqlitedatabase sqlitedatabase; fooddbhelper fooddbhelper; cursor cursor; listdataadapter listdataadapter; private button button1; listdataadapter dataadapter = null; button button; dataprovider dataprovider; arraylist<hashmap<string, string>> namesslist; edittext inputsearch; string search_name; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); requestwindowfeature(window.feature_no_title); setcontentview(r.layout.data_list_layout); inputsearch = (edittext)findviewbyid(r.id.inputsearch); inputsearch.addtextchangedlistener(new textwatcher() { @override public void ontextchanged(charsequence cs, int arg1, int arg2, int arg3) { // when user changes text listdataadapter.getfilter().filter(cs); } @override public void beforetextchanged(charsequence arg0, int arg1, int arg2, int arg3) { // todo auto-generated method stub } @override public void aftertextchanged(editable arg0) { // todo auto-generated method stub } }); listview = (listview) findviewbyid(r.id.list_view); listdataadapter = new listdataadapter(getapplicationcontext(), r.layout.row_layout) { @override protected void showcheckedbutton(int position, boolean value) { // todo auto-generated method stub dataprovider item = (dataprovider) listdataadapter .getitem(position); log.i("", ""); item.setselected(value); button mybutton = (button) findviewbyid(r.id.findselected); mybutton.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { stringbuffer responsetext = new stringbuffer(); responsetext .append("the following dishes selected...\n"); arraylist<dataprovider> list = listdataadapter .getselectedindexes(); int sum = 0; (int = 0; < list.size(); i++) { dataprovider dataprovider = list.get(i); sum = sum + dataprovider.getcalorie(); responsetext.append("\n" + dataprovider.getname() + " : " + dataprovider.getcalorie() + " kcal" ); } toast.maketext(getapplicationcontext(), ""+responsetext+"\n"+"................................." +"\n"+"total calories in menu : " +sum, toast.length_long).show(); } }); } }; listview.setadapter(listdataadapter); fooddbhelper = new fooddbhelper(getapplicationcontext()); sqlitedatabase = fooddbhelper.getreadabledatabase(); cursor = fooddbhelper.getinformations(sqlitedatabase); if (cursor.movetofirst()) { { string name, quantity, fat, protein, sugar, vitamins; boolean selected = false; string names = null; integer calorie; name = cursor.getstring(0); quantity = cursor.getstring(1); calorie = integer.valueof(cursor.getstring(2)); fat = cursor.getstring(3); protein = cursor.getstring(4); sugar = cursor.getstring(5); vitamins = cursor.getstring(6); dataprovider dataprovider = new dataprovider(name, quantity, calorie, fat, protein, sugar, vitamins, names, selected); listdataadapter.add(dataprovider); } while (cursor.movetonext()); }
this custom adapter code
public abstract class listdataadapter extends arrayadapter { list list = new arraylist(); boolean index[]; public listdataadapter(context context, int resource) { super(context, resource); index = new boolean[list.size()]; } static class layouthandler { textview name, quantity, calorie, fat, protein, sugar, vitamins; checkbox names; } @override public void add(object object) { super.add(object); list.add(object); index = new boolean[list.size()]; } @override public int getcount() { return list.size(); } @override public object getitem(int position) { return list.get(position); } @override public view getview(final int position, view convertview, viewgroup parent) { view row = convertview; layouthandler layouthandler; if (row == null) { layoutinflater layoutinflater = (layoutinflater) this.getcontext() .getsystemservice(context.layout_inflater_service); row = layoutinflater.inflate(r.layout.row_layout, parent, false); layouthandler = new layouthandler(); layouthandler.name = (textview) row .findviewbyid(r.id.text_dish_name); layouthandler.quantity = (textview) row .findviewbyid(r.id.text_dish_quantity); layouthandler.calorie = (textview) row .findviewbyid(r.id.text_dish_calorie); layouthandler.fat = (textview) row.findviewbyid(r.id.text_dish_fat); layouthandler.protein = (textview) row .findviewbyid(r.id.text_dish_protein); layouthandler.sugar = (textview) row .findviewbyid(r.id.text_dish_sugar); layouthandler.vitamins = (textview) row .findviewbyid(r.id.text_dish_vitamins); layouthandler.names = (checkbox) row.findviewbyid(r.id.checkbox1); row.settag(layouthandler); } else { layouthandler = (layouthandler) row.gettag(); } dataprovider dataprovider = (dataprovider) this.getitem(position); layouthandler.name.settext(dataprovider.getname()); layouthandler.quantity.settext(dataprovider.getquantity()); layouthandler.calorie .settext(string.valueof(dataprovider.getcalorie())); layouthandler.fat.settext(dataprovider.getfat()); layouthandler.protein.settext(dataprovider.getprotein()); layouthandler.sugar.settext(dataprovider.getsugar()); layouthandler.vitamins.settext(dataprovider.getvitamins()); //layouthandler.names.setchecked(dataprovider.isselected()); layouthandler.names.settag(position); layouthandler.names.setchecked(index[position]); layouthandler.names .setoncheckedchangelistener(new compoundbutton.oncheckedchangelistener() { @override public void oncheckedchanged(compoundbutton buttonview, boolean ischecked) { // todo auto-generated method stub int pos = (integer) buttonview.gettag(); index[pos] = ischecked; showcheckedbutton(position, ischecked); } }); return row; } public arraylist<dataprovider> getselectedindexes() { int size = list.size(); arraylist<dataprovider> selecteditems = new arraylist<dataprovider>(); (int = 0; < size; i++) { dataprovider citem = (dataprovider) list.get(i); if (index[i]) { selecteditems.add(citem); } } return selecteditems; } protected abstract void showcheckedbutton(int position, boolean value);
}
use addtextchangedlistener() method of edittext. this
inputsearch = (edittext)findviewbyid(r.id.edittext); .... .... listview.setadapter(listdataadapter); inputsearch.addtextchangedlistener(new textwatcher() { @override public void ontextchanged(charsequence cs, int arg1, int arg2, int arg3) { // when user changes text listdataadapter.getfilter().filter(cs); } @override public void beforetextchanged(charsequence arg0, int arg1, int arg2, int arg3) { // todo auto-generated method stub } @override public void aftertextchanged(editable arg0) { // todo auto-generated method stub } });
Comments
Post a Comment