Monday, 15 September 2014

Android Autocomplete onclicklistener -



Android Autocomplete onclicklistener -

i've created custom autocompleteadapter need allow user select object (customer).

my autocompleteadapter looks this:

package nl.raakict.android.spc.adapter; import android.content.context; import android.view.layoutinflater; import android.view.view; import android.view.viewgroup; import android.widget.arrayadapter; import android.widget.filter; import android.widget.filterable; import android.widget.textview; import java.util.arraylist; import nl.raakict.android.spc.fragment.zoekenfragment; import nl.raakict.android.spc.model.customer; import nl.raakict.android.spc.model.supplier; import nl.raakict.android.spc.r; public class customerautocompleteadapter extends arrayadapter<customer> implements filterable{ // sent context private context context; // custom values spinner (user) private arraylist<customer> values; private arraylist<customer> originalvalues; private arrayfilter mfilter; private client selectedcustomer; private zoekenfragment zoekenfragment; public customerautocompleteadapter(context context, int textviewresourceid, arraylist<customer> values) { super(context, textviewresourceid, values); this.context = context; this.values = new arraylist<customer>(values); this.originalvalues = new arraylist<customer>(values); } public client getselectedcustomer() { homecoming selectedcustomer; } public int getcount(){ homecoming values.size(); } public client getitem(int position){ homecoming values.get(position); } public long getitemid(int position){ homecoming position; } public view getview(int position, view convertview, viewgroup parent) { view view = convertview; if (view == null) { layoutinflater inflater = (layoutinflater) context.getsystemservice(context.layout_inflater_service); view = inflater.inflate(r.layout.simple_spinner_item, null); } client item = getitem(position); if (item!= null) { // layout has 1 textview textview itemview = (textview) view; if (itemview != null) { // whatever want string , long itemview.settext(item.tostring()); } view.settag(item); view.setonclicklistener(new view.onclicklistener() { @override public void onclick(view view) { selectedcustomer = (customer)view.gettag(); zoekenfragment.startsearch(selectedcustomer); } }); } homecoming view; } @override public view getdropdownview(int position, view convertview, viewgroup parent) { view view = convertview; if (view == null) { layoutinflater inflater = (layoutinflater) context.getsystemservice(context.layout_inflater_service); view = inflater.inflate(r.layout.simple_spinner_item, null); } view.settag(values.get(position)); // layout has 1 textview textview label = (textview) view; label.settext(values.get(position).getname()); homecoming label; } @override public filter getfilter() { if (mfilter == null) { mfilter = new arrayfilter(); } homecoming mfilter; } public void setselectedlistener(zoekenfragment zoekenfragment) { this.zoekenfragment = zoekenfragment; } private class arrayfilter extends filter { private object lock; @override protected filterresults performfiltering(charsequence prefix) { filterresults results = new filterresults(); if (originalvalues == null) { synchronized (lock) { originalvalues =new arraylist<customer>(values); } } if (prefix == null || prefix.length() == 0) { synchronized (lock) { arraylist<customer> list = new arraylist<customer>(originalvalues); results.values = list; results.count = list.size(); } } else { final string prefixstring = prefix.tostring().tolowercase(); arraylist<customer> values = originalvalues; int count = values.size(); arraylist<customer> newvalues = new arraylist<customer>(count); (int = 0; < count; i++) { client item = values.get(i); if (item.getname().tolowercase().contains(prefixstring.tolowercase())) { newvalues.add(item); } } results.values = newvalues; results.count = newvalues.size(); } homecoming results; } @suppresswarnings("unchecked") @override protected void publishresults(charsequence constraint, filterresults results) { if(results.values!=null){ values = (arraylist<customer>) results.values; }else{ values = new arraylist<customer>(); } if (results.count > 0) { notifydatasetchanged(); } else { notifydatasetinvalidated(); } } } }

this code works, selecting client name automatically fires onclicklistener, problem dropdown list (spinner) doesn't close , doesn't autocomplete name. want either original onclick gets fired or whatever original onclick did.

here's onclick method need:

view.setonclicklistener(new view.onclicklistener() { @override public void onclick(view view) { selectedcustomer = (customer)view.gettag(); zoekenfragment.startsearch(selectedcustomer); } });

edit

this didn't have positive results either:

private void initiatecustomerautocomplete() { customerautocomplete = (autocompletetextview) getview().findviewbyid( r.id.autocomplete_klantnaam); customeradapter = new customerautocompleteadapter(getview() .getcontext(), android.r.layout.simple_spinner_item, customers ); customerautocomplete.addtextchangedlistener(this); customerautocomplete.setadapter(customeradapter); customerautocomplete.setonitemselectedlistener(new adapterview.onitemselectedlistener() { @override public void onitemselected(adapterview<?> adapterview, view view, int i, long l) { client selectedcustomer = (customer)view.gettag(); startsearch(selectedcustomer); } @override public void onnothingselected(adapterview<?> adapterview) { } }); customerautocomplete.setthreshold(1); customeradapter.setselectedlistener(this); }

so found solution. looked autocompletetextview class see methods had , found dismissdropdown() method. next passed customautocompletetextview adapter , changed onclicklistener to:

view.setonclicklistener(new view.onclicklistener() { @override public void onclick(view view) { selectedcustomer = (customer) view.gettag(); zoekenfragment.startsearch(selectedcustomer); customerautocomplete.settext(selectedcustomer.getname()); customerautocomplete.dismissdropdown(); } });

android autocomplete onclick android-custom-view

No comments:

Post a Comment