android - filter for custom ArrayAdapter doesn't setting up -


i use filter custom adapter. adapter class looks :

 public class contactadaper  extends arrayadapter<contactitem>  implements filterable{     view view;     contactholder holder = null;      int color = 0;     context context;     int layoutresourceid;        public static int rowheight = 0;     private viewswitcher switcher;     list<contactitem> contacts = null;     list<contactitem> filtredcontacts = null;     map<contactitem, view> contactviewmap = contactsviewmapsingletone.getinstance().getorderviewmap();     private filter filter;    public contactadaper(context context,  int layoutresourceid,list<contactitem> contacts) {        super(context, layoutresourceid, contacts);        this.layoutresourceid = layoutresourceid;        this.context = context;        this.filtredcontacts = contacts;     }    @override    public contactitem getitem(int arg0) {         return contacts.get(arg0);    }     @override    public long getitemid(int arg0) {        return arg0;    }    @override    public filter getfilter()    {        if (filter == null)            filter = new contactfilter();         return filter;    }    /**  *   метод для привязки элементов ui к данным конкретного контакта */    @override    public view getview(int position, view convertview, viewgroup parent) {        view row = convertview;        view = row;        if(row == null)        {         layoutinflater inflater = (layoutinflater)this.context.getsystemservice(context.layout_inflater_service);            row = inflater.inflate(r.layout.contact_item, parent, false);            holder = new contactholder();            holder.contacticon = (imageview)row.findviewbyid(r.id.contacticon);            holder.contactname = (customtextview)row.findviewbyid(r.id.contactname);            holder.contactnumber = (customtextview)row.findviewbyid(r.id.contactnumber);            holder.contactdays = (customtextview)row.findviewbyid(r.id.contactdays);            row.settag(holder);        }        else        {            holder = (contactholder)row.gettag();        }         contactitem contact = filtredcontacts.get(position);        try{             if (contact.getcontactgroup()!=null)                    holder.contacticon.setbackgroundresource(contact.getcontactgroup().geticon());                else                 holder.contacticon.setbackgroundresource(contact.geticon());                 holder.contactname.settext(contact.getname());                 holder.contactnumber.settext(contact.getnumber());                 holder.contactdays.settext(integer.tostring(contact.getdays()));        }        catch(exception e)        {         e.printstacktrace();         }          contactviewmap.put(contact,row);        return row;    }    static class contactholder    {     imageview contacticon;     customtextview contactname;     customtextview contactnumber;     customtextview contactdays;    }        @suppresslint("defaultlocale")     private class contactfilter extends filter        {                @override                protected filterresults performfiltering(charsequence constraint)                {                       filterresults results = new filterresults();                    string prefix = constraint.tostring().tolowercase();                     if (prefix == null || prefix.length() == 0)                    {                        arraylist<contactitem> list = new arraylist<contactitem>(filtredcontacts);                        results.values = list;                        results.count = list.size();                    }                    else                    {                        final arraylist<contactitem> list =  new arraylist<contactitem>();                        synchronized (this)                        {                            list.addall(filtredcontacts);                        }                         int count = list.size();                        final arraylist<contactitem> nlist = new arraylist<contactitem>(count);                         (int i=0; i<count; i++)                        {                            final contactitem pkmn = list.get(i);                            if(pkmn.getname().tolowercase(locale.getdefault()).contains(constraint))                                nlist.add(pkmn);                        }                        results.values = nlist;                        results.count = nlist.size();                    }                    return results;                }                 @suppresswarnings("unchecked")                @override                protected void publishresults(charsequence constraint, filterresults results) {                    filtredcontacts = (arraylist<contactitem>)results.values;                    notifydatasetchanged();                    clear();                    for(int = 0, l = filtredcontacts.size(); < l; i++)                    {                          add(filtredcontacts.get(i));                    }                    notifydatasetinvalidated();            }      } } 

but problem filtering doesn't execute. adapter setting properly, without filtering. added contancts_list.settextfilterenabled(true); didn't help. possible solution ?

my problem in wrong arraylist adapter using. modified solution, works me:

 public class contactadaper  extends arrayadapter<contactitem>  implements filterable{     view view;     contactholder holder = null;      int color = 0;     context context;     int layoutresourceid;        public static int rowheight = 0;     private viewswitcher switcher;     list<contactitem> contacts = null;     list<contactitem> filtredcontacts = null;     frequentlyusedmethods faq;     sparsearray<string> labels;     map<contactitem, view> contactviewmap = contactsviewmapsingletone.getinstance().getorderviewmap();     private filter filter;    public contactadaper(context context,  int layoutresourceid,list<contactitem> contacts, sparsearray<string> labels) {        super(context, layoutresourceid, contacts);        this.layoutresourceid = layoutresourceid;        this.context = context;         this.contacts = new arraylist<contactitem>();        this.contacts.addall(contacts);        this.filtredcontacts = new arraylist<contactitem>();        this.filtredcontacts.addall(contacts);        this.labels = labels;        faq = new frequentlyusedmethods(context);     }    @override    public contactitem getitem(int arg0) {         return contacts.get(arg0);    }     @override    public long getitemid(int arg0) {        return arg0;    }    @override    public filter getfilter()    {        if (filter == null)            filter = new contactfilter();         return filter;    }     @override    public view getview(int position, view convertview, viewgroup parent) {        view row = convertview;        view = row;        if(row == null)        {             layoutinflater inflater = (layoutinflater)this.context.getsystemservice(context.layout_inflater_service);            row = inflater.inflate(r.layout.contact_item, parent, false);            holder = new contactholder();            holder.contact_label=(textview)row.findviewbyid(r.id.contact_label);            holder.contacticon = (imageview)row.findviewbyid(r.id.contacticon);            holder.contactname = (customtextview)row.findviewbyid(r.id.contactname);            holder.contactnumber = (customtextview)row.findviewbyid(r.id.contactnumber);            holder.contactdays = (customtextview)row.findviewbyid(r.id.contactdays);            row.settag(holder);         }        else        {            holder = (contactholder)row.gettag();        }         contactitem contact = filtredcontacts.get(position);        try{             if (contact.getdays()==0)            {                this.remove(contact);                faq.deletecontact(contact);            }            else             {            if (contact.getcontactgroup()!=null)                 holder.contacticon.setbackgroundresource(contact.getcontactgroup().geticon());                else                 holder.contacticon.setbackgroundresource(contact.geticon());                   holder.contactname.settext(contact.getname());                 holder.contactnumber.settext(contact.getnumber());                 holder.contactdays.settext(integer.tostring(contact.getdays()));                 if (labels.get(position)!=null)                 {                         holder.contact_label.setvisibility(view.visible);                         holder.contact_label.settext(labels.get(position));                 }                 else                         holder.contact_label.setvisibility(view.invisible);            }        }        catch(exception e)        {         e.printstacktrace();         }        contactviewmap.put(contact,row);        return row;    }    public sparsearray<string> getsparselabelsarray()    {        return this.labels;    }    public list<contactitem> getitems() {        return filtredcontacts;    }    public map<contactitem, view> getviewcontactbinditems() {        return contactviewmap;    }    static class contactholder    {      textview  contact_label;     imageview contacticon;     customtextview contactname;     customtextview contactnumber;     customtextview contactdays;    }        @suppresslint("defaultlocale")     private class contactfilter extends filter        {                @override                protected filterresults performfiltering(charsequence constraint)                {                       filterresults results = new filterresults();                    string prefix = constraint.tostring().tolowercase();                     if (prefix == null || prefix.length() == 0)                    {                        results.values = contacts;                        results.count = contacts.size();                    }                    else                    {                        final arraylist<contactitem> list =  new arraylist<contactitem>();                        synchronized (this)                        {                            list.addall(contacts);                        }                        filtredcontacts.clear();                        int count = list.size();                        (int i=0; i<count; i++)                        {                            final contactitem pkmn = list.get(i);                            if(pkmn.getname().tolowercase(locale.getdefault()).contains(constraint))                            {                                log.i("found pref",pkmn.tostring() );                                filtredcontacts.add(pkmn);                            }                        }                         for(int = 0, l = filtredcontacts.size(); < l; i++)                        {                            log.i("filtered list",filtredcontacts.get(i).tostring());                        }                        results.values = filtredcontacts;                        results.count = filtredcontacts.size();                    }                    return results;                }                 @suppresswarnings("unchecked")                @override                protected void publishresults(charsequence constraint, filterresults results) {                    filtredcontacts = (arraylist<contactitem>)results.values;                    notifydatasetchanged();                    clear();                    for(int = 0, l = filtredcontacts.size(); < l; i++)                    {                           add(filtredcontacts.get(i));                    }                    notifydatasetchanged();            }      } } 

Comments

Popular posts from this blog

matlab - Deleting rows with specific rules -

php - MySQLi multi_query results for later use -