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
Post a Comment