Thursday 15 January 2015

java - Filter ListView using EditText -



java - Filter ListView using EditText -

basically i'm trying filter listview using edittext. manage store filtered results seems i'm missing since ui not updated , it's not displaying on text changed. indications?

import android.app.activity; import android.content.context; import android.view.layoutinflater; import android.view.view; import android.view.viewgroup; import android.widget.baseadapter; import android.widget.filter; import android.widget.filterable; import android.widget.imageview; import android.widget.textview; import com.enloop.r; import java.util.arraylist; public class friendswithmeadapter extends baseadapter implements filterable { private context mcontext; private arraylist<friendsmodel> friend; private arraylist<friendsmodel> items = new arraylist<friendsmodel>(); private arraylist<friendsmodel> suggestions = new arraylist<friendsmodel>(); public friendswithmeadapter(context c, arraylist<friendsmodel> ai) { mcontext = c; friend = ai; } @override public int getcount() { homecoming friend.size(); } @override public object getitem(int position) { homecoming friend.get(position); } @override public long getitemid(int position) { homecoming 0; } @override public view getview(int position, view convertview, viewgroup parent) { if (convertview == null) { layoutinflater minflater = (layoutinflater) mcontext.getsystemservice(activity.layout_inflater_service); convertview = minflater.inflate(r.layout.item_friend, null); } imageview userimage = (imageview) convertview.findviewbyid(r.id.invited_friend_picture); imageview checkimage = (imageview) convertview.findviewbyid(r.id.invite_friends_check); textview name = (textview) convertview.findviewbyid(r.id.invited_friend_name); textview username = (textview) convertview.findviewbyid(r.id.invited_friend_name); userimage.setimagebitmap(friend.get(position).getuserimage()); checkimage.setimageresource(friend.get(position).iswithme() ? r.drawable.btn_checkmark_round_tiny : r.drawable.btn_before_checkmark_round_tiny); string userenloopnamestring = friend.get(position).getname(); name.settext(usernamestring); string usernamestring = friend.get(position).getusername(); if (usernamestring.length() > 12) { usernamestring = usernamestring.substring(0, 10); usernamestring += ".."; } username.settext(usernamestring); homecoming convertview; } @override public filter getfilter() { filter filter = new filter() { @override protected filterresults performfiltering(charsequence constraint) { filterresults results = new filterresults(); if (constraint == null && constraint.length() == 0) { results.values = friend; results.count = friend.size(); } else { (friendsmodel item : friend) { if (item.getname().tolowercase().contains(constraint.tostring().tolowercase())) suggestions.add(item); } results.values = suggestions; results.count = suggestions.size(); } homecoming results; } @override protected void publishresults(charsequence constraint, filterresults results) { if (results.count == 0) { notifydatasetinvalidated(); } else { items = (arraylist<friendsmodel>) results.values; } } }; homecoming filter; } } msearch.addtextchangedlistener(new textwatcher() { @override public void beforetextchanged(charsequence s, int start, int count, int after) { } @override public void ontextchanged(charsequence s, int start, int before, int count) { adapter.getfilter().filter(s.tostring()); } @override public void aftertextchanged(editable s) { } });

try way,hope help solve problem.

msearch.addtextchangedlistener(new textwatcher() { @override public void beforetextchanged(charsequence s, int start, int count, int after) { } @override public void ontextchanged(charsequence s, int start, int before, int count) { } @override public void aftertextchanged(editable s) { adapter.filter(text); } });

here utilize 2 list 1 original info , 1 filtered info please maintain mind can not utilize (=)assignment filtered info if way filtered info alter original info too,filtered info utilize shown list list item have utilize addall() instead (=) assignment not altered original info , whenever utilize custom adapter seek utilize viewholder pattern.

public class friendswithmeadapter extends baseadapter implements filterable { private context mcontext; private arraylist<friendsmodel> friend; private arraylist<friendsmodel> suggestions = new arraylist<friendsmodel>(); public friendswithmeadapter(context mcontext, arraylist<friendsmodel> friend) { this.mcontext = mcontext; this.friend = friend; suggestions =new arraylist<friendsmodel>(); suggestions.addall(friend); } @override public int getcount() { homecoming suggestions.size(); } @override public object getitem(int position) { homecoming suggestions.get(position); } @override public long getitemid(int position) { homecoming 0; } @override public view getview(int position, view convertview, viewgroup parent) { viewholder holder; if (convertview == null) { holder = new viewholder(); convertview = layoutinflater.from(mcontext).inflate(r.layout.item_friend, null); holder.userimage = (imageview) convertview.findviewbyid(r.id.invited_friend_picture); holder.checkimage = (imageview) convertview.findviewbyid(r.id.invite_friends_check); holder.name = (textview) convertview.findviewbyid(r.id.invited_friend_name); holder.username = (textview) convertview.findviewbyid(r.id.invited_friend_name); convertview.settag(holder); }else{ holder = (viewholder) convertview.gettag(); } holder.userimage.setimagebitmap(suggestions.get(position).getuserimage()); holder.checkimage.setimageresource(suggestions.get(position).iswithme() ? r.drawable.btn_checkmark_round_tiny : r.drawable.btn_before_checkmark_round_tiny); string userenloopnamestring = suggestions.get(position).getname(); holder.name.settext(usernamestring); string usernamestring = suggestions.get(position).getusername(); if (usernamestring.length() > 12) { usernamestring = usernamestring.substring(0, 10); usernamestring += ".."; } holder.username.settext(usernamestring); homecoming convertview; } public void filter(string chartext) { suggestions.clear(); if (chartext.length() == 0) { suggestions.addall(friend); }else{ (friendsmodel item : friend) { if (item.getname().tolowercase().contains(constraint.tostring().tolowercase())) suggestions.add(item); } } notifydatasetchanged(); } public class viewholder { imageview userimage; imageview checkimage; textview name; textview username; } }

java android

No comments:

Post a Comment