android - How could i filter the listview using baseadapter -
i trying filter listview getfilter method not working,
here code:
@override public void aftertextchanged(editable s) { } @override public void beforetextchanged(charsequence s, int start, int count, int after) { } @override public void ontextchanged(charsequence s, int start, int before, int count) { mhistoryadapter.getfilter().filter(s); } i have added method in baseadapter also
public filter getfilter() { return null; } but not working..could me out..@thanks
mainactivity.java
public class mainactivity extends activity { private listview mlistview; private customadapter mcustomadapter; private edittext medittext; private arraylist<contacts> _contacts = new arraylist<contacts>(); @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); (int = 0; < 100; i++) { contacts contacts = new contacts(); contacts.setid(""+i); contacts.setname("name "+i); _contacts.add(contacts); } mlistview = (listview) findviewbyid(r.id.listview1); medittext = (edittext) findviewbyid(r.id.edittext1); mcustomadapter = new customadapter(mainactivity.this, _contacts); mlistview.setadapter(mcustomadapter); medittext.addtextchangedlistener(new textwatcher() { @override public void ontextchanged(charsequence arg0, int arg1, int arg2, int arg3) { mcustomadapter.getfilter().filter(arg0); } @override public void beforetextchanged(charsequence arg0, int arg1, int arg2, int arg3) { } @override public void aftertextchanged(editable arg0) { } }); } } customadapter.java
public class customadapter extends baseadapter implements filterable{ private arraylist<contacts> _contacts; private activity context; private layoutinflater inflater; private valuefilter valuefilter; private arraylist<contacts> mstringfilterlist; public customadapter(activity context, arraylist<contacts> _contacts) { super(); this.context = context; this._contacts = _contacts; mstringfilterlist = _contacts; this.inflater = (layoutinflater) context.getsystemservice(context.layout_inflater_service); getfilter(); } @override public int getcount() { return _contacts.size(); } @override public object getitem(int position) { return _contacts.get(position).getname(); } @override public long getitemid(int position) { return 0; } public class viewholder { textview tname, tplace; } @override public view getview(int position, view convertview, viewgroup parent) { viewholder holder; if (convertview == null) { holder = new viewholder(); convertview = inflater.inflate(r.layout.activity_main, null); holder.tname = (textview) convertview.findviewbyid(r.id.textview1); holder.tplace = (textview) convertview.findviewbyid(r.id.textview2); convertview.settag(holder); } else holder = (viewholder) convertview.gettag(); holder.tname.settext("" + _contacts.get(position).getname()); holder.tplace.settext("" + "" + _contacts.get(position).getid()); return convertview; } @override public filter getfilter() { if(valuefilter==null) { valuefilter=new valuefilter(); } return valuefilter; } private class valuefilter extends filter { //invoked in worker thread filter data according constraint. @override protected filterresults performfiltering(charsequence constraint) { filterresults results=new filterresults(); if(constraint!=null && constraint.length()>0){ arraylist<contacts> filterlist=new arraylist<contacts>(); for(int i=0;i<mstringfilterlist.size();i++){ if((mstringfilterlist.get(i).getname().touppercase()) .contains(constraint.tostring().touppercase())) { contacts contacts = new contacts(); contacts.setname(mstringfilterlist.get(i).getname()); contacts.setid(mstringfilterlist.get(i).getid()); filterlist.add(contacts); } } results.count=filterlist.size(); results.values=filterlist; }else{ results.count=mstringfilterlist.size(); results.values=mstringfilterlist; } return results; } //invoked in ui thread publish filtering results in user interface. @suppresswarnings("unchecked") @override protected void publishresults(charsequence constraint, filterresults results) { _contacts=(arraylist<contacts>) results.values; notifydatasetchanged(); } } } contacts.java
public class contacts { private string name; private string id; public string getname() { return name; } public void setname(string name) { this.name = name; } public string getid() { return id; } public void setid(string id) { this.id = id; } } main.xml
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <edittext android:id="@+id/edittext1" android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10" > <requestfocus /> </edittext> <listview android:id="@+id/listview1" android:layout_width="match_parent" android:layout_height="wrap_content" > </listview> activity_main.xml
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginbottom="2dp" android:layout_marginleft="1dp" android:layout_marginright="1dp" android:layout_margintop="2dp" android:background="@android:color/black" android:gravity="center_vertical" android:paddingbottom="2dp" android:paddingtop="2dp" tools:context=".mainactivity" > <textview android:id="@+id/textview1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginleft="8dp" android:text="large text" android:textappearance="?android:attr/textappearancelarge" android:textcolor="@android:color/white" /> <textview android:id="@+id/textview2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginleft="8dp" android:text="small text" android:textappearance="?android:attr/textappearancesmall" android:textcolor="@android:color/white" /> this sample project code. use code you
Comments
Post a Comment