android - AutoCompleteTextView for ListView with two type preview -


i have 1 listview autocompletetextview. list view create adapter has type complex object. adapter implements filterable. ok. want show filter results list consists 1 property of complex object.

private class orderadapter extends arrayadapter<request> implements             filterable {         private context context;         private int resourceid;         private list<request> listorders;         private list<request> moriginalvalues;         private listfilter listfilter;          public orderadapter(context context, int resource, list<request> objects) {             super(context, resource, objects);             this.context = context;             this.resourceid = resource;             this.listorders = objects;             this.moriginalvalues = new arraylist<request>(listorders);         }          @override         public int getcount() {             return listorders.size();         }          @override         public request getitem(int pos) {             return listorders.get(pos);         }          @override         public view getview(int position, view convertview, viewgroup parent) {             layoutinflater layoutinflater = (layoutinflater) context                     .getsystemservice(layout_inflater_service);             view rowview = layoutinflater.inflate(resourceid, parent, false);              request request = listorders.get(position);              textview clientname = (textview) rowview                     .findviewbyid(r.id.client_name);             clientname.settext(request.getclientname());              textview opportunitynumber = (textview) rowview                     .findviewbyid(r.id.opportunity_number);             opportunitynumber.settext(request.getopportunity()                     .getopportunitynumber());              textview detaileddescription = (textview) rowview                     .findviewbyid(r.id.product_desc);             detaileddescription.settext(request.getprojectdescription());              textview ownername = (textview) rowview                     .findviewbyid(r.id.requester);             ownername.settext(request.getopportunity().getopportunityowner());              textview lastmodifieddate = (textview) rowview                     .findviewbyid(r.id.last_modified_date_opportunity);             lastmodifieddate.settext(datetimeconverter.convertdatetostring(                     request.getopportunity().getmodifieddate(), context                     .getresources().getstring(r.string.date_format)));              return rowview;         }          @override         public filter getfilter() {             if (listfilter == null) {                 listfilter = new listfilter();             }             return listfilter;         }          private class listfilter extends filter {             private object lock;              @override             public charsequence convertresulttostring(object order) {                 return ((request) order).getclientname();             }              @override             protected filterresults performfiltering(charsequence prefix) {                 filterresults filterresults = new filterresults();                 if (moriginalvalues == null) {                     synchronized (lock) {                         moriginalvalues = new arraylist<request>(listorders);                     }                 }                  if (prefix == null || prefix.length() == 0) {                     list<request> list = new arraylist<request>(moriginalvalues);                     filterresults.values = list;                     filterresults.count = list.size();                 } else {                     string prefixstring = prefix.tostring().tolowercase();                     list<request> values = new arraylist<request>(                             moriginalvalues);                     int count = values.size();                      list<request> filteredvalues = new arraylist<request>(count);                     (request request : values) {                         if (request.getopportunity().getopportunitynumber()                                 .tolowercase().contains(prefixstring)                                 || request.getclientname().tolowercase()                                 .contains(prefixstring)) {                             filteredvalues.add(request);                         }                     }                     filterresults.values = filteredvalues;                     filterresults.count = filteredvalues.size();                 }                 return filterresults;             }              @suppresswarnings("unchecked")             @override             protected void publishresults(charsequence filterstring,                                           filterresults results) {                 list<request> values = (arraylist<request>) results.values;                 if (!values.isempty()) {                     listorders = values;                 } else {                     listorders = new arraylist<request>();                 }                  if (results.count > 0) {                     notifydatasetchanged();                 } else {                     notifydatasetinvalidated();                 }              }          }      } 

should have 2 type adapter or exist way that?

you can use 1 adapter,

in order support more 1 view type need override 2 methods in adapter:

1.getviewtypecount 2.getitemviewtype

example :

    /**      * indicates how many view types adapter support. 2 types - incoming , outgoing view          */         private final static int num_view_type = 2;         private final static int view_incoming = 0;         private final static int view_outgoing = 1;          private static final string tag = "conversationadapter";          public conversationadapter(context context, cursor c, int threadid) {             super(context, c, 0);             this.inflater = layoutinflater.from(context);             mthreadid = threadid;         }          @override         public int getviewtypecount() {             return num_view_type;         }          @override         public int getitemviewtype(int position) {             cursor c = (cursor) getitem(position);             int itemtype = c.getint(c.getcolumnindex(sms.type));             return (itemtype == 1 ? view_incoming : view_outgoing);         }          @override         public view newview(context context, cursor cursor, viewgroup parent) {             int viewtype = getitemviewtype(cursor.getposition());              view rowview = (viewtype == view_incoming) ? inflater.inflate(                     r.layout.conversation_item_received, parent, false) : inflater                     .inflate(r.layout.conversation_item_sent, parent, false);              final viewholder holder = new viewholder();             holder.textbody = (textview) rowview                     .findviewbyid(r.id.conversation_item_body);             holder.textdate = (textview) rowview                     .findviewbyid(r.id.conversation_item_date);             holder.imagetype = (imageview) rowview.findviewbyid(r.id.img_type);             rowview.settag(holder);             return rowview;         } @override     public void bindview(view view, context context, cursor cursor) {         final viewholder holder = (viewholder) view.gettag(); } 

Comments

Popular posts from this blog

android - Get AccessToken using signpost OAuth without opening a browser (Two legged Oauth) -

org.mockito.exceptions.misusing.InvalidUseOfMatchersException: mockito -

google shop client API returns 400 bad request error while adding an item -