I am using Custom Adapter with AutoCompleteTextView. It works great on emulator and tablet. However, a problem occurs on my phone in landscape mode. The automatic complete prompts displayed in this mode are information about the object, not text. However, when I select an element, the fields are correctly filled with the text in the corresponding fields.
Autocomplete for other fields based on the Android Stock Array Adapter works great.
Do I have to do something for this in my user adapter? I saw only one similar question about SO. One answer to this question was to override the toString method, but I could not figure it out enough to implement in my code.
Any guidance welcome? Please let me know if you need more information.
EDIT: adapter source code added ...
public class Part_Mstr_Info { private long part_id; private String name, desg, org, dept; public Part_Mstr_Info(long part_id, String name, String desg, String org, String dept) { this.part_id = part_id; this.name = name; this.desg = desg; this.org = org; this.dept = dept; } public long get_part_id() { return part_id; } public String get_name() { return name; } public String get_desg() { return desg; } public String get_org() { return org; } public String get_dept() { return dept; } } public class CustomAdapter extends ArrayAdapter<Part_Mstr_Info> implements Filterable{ private List<Part_Mstr_Info> entries; private ArrayList<Part_Mstr_Info> orig; private Activity activity; private ArrayFilter myFilter; public CustomAdapter(Activity a, int textViewResourceId, ArrayList<Part_Mstr_Info> entries) { super(a, textViewResourceId, entries); this.entries = entries; this.activity = a; } public static class ViewHolder{ public TextView tv_ac_name; public TextView tv_ac_desg; public TextView tv_ac_org; public TextView tv_ac_dept; } @Override public int getCount(){ return entries!=null ? entries.size() : 0; } @Override public Part_Mstr_Info getItem(int index) { return entries.get(index); } @Override public View getView(int position, View convertView, ViewGroup parent) { View v = convertView; ViewHolder holder; if (v == null) { LayoutInflater vi = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); v = vi.inflate(R.layout.ac_name_list, null); holder = new ViewHolder(); holder.tv_ac_name = (TextView) v.findViewById(R.id.ac_name); holder.tv_ac_desg = (TextView) v.findViewById(R.id.ac_desg); holder.tv_ac_org = (TextView) v.findViewById(R.id.ac_org); holder.tv_ac_dept = (TextView) v.findViewById(R.id.ac_dept); v.setTag(holder); } else holder=(ViewHolder)v.getTag(); final Part_Mstr_Info custom = entries.get(position); if (custom != null) { holder.tv_ac_name.setText(custom.get_name()); holder.tv_ac_desg.setText(custom.get_desg()); holder.tv_ac_org.setText(custom.get_org()); holder.tv_ac_dept.setText(custom.get_dept()); } return v; } @Override public Filter getFilter() { if (myFilter == null){ myFilter = new ArrayFilter(); } return myFilter; } @Override public String toString() { String temp = getClass().getName(); return temp; } private class ArrayFilter extends Filter { @Override protected FilterResults performFiltering(CharSequence constraint) { FilterResults results = new FilterResults(); if (orig == null) orig = new ArrayList<Part_Mstr_Info>(entries); if (constraint != null && constraint.length() != 0) { ArrayList<Part_Mstr_Info> resultsSuggestions = new ArrayList<Part_Mstr_Info>(); for (int i = 0; i < orig.size(); i++) { if(orig.get(i).get_name().toLowerCase().startsWith(constraint.toString().toLowerCase())){ resultsSuggestions.add(orig.get(i)); } } results.values = resultsSuggestions; results.count = resultsSuggestions.size(); } else { ArrayList <Part_Mstr_Info> list = new ArrayList <Part_Mstr_Info>(orig); results.values = list; results.count = list.size(); } return results; } @Override @SuppressWarnings("unchecked") protected void publishResults(CharSequence constraint, FilterResults results) { clear(); ArrayList<Part_Mstr_Info> newValues = (ArrayList<Part_Mstr_Info>) results.values; if(newValues !=null) { for (int i = 0; i < newValues.size(); i++) { add(newValues.get(i)); } if(results.count>0) { notifyDataSetChanged(); } else { notifyDataSetInvalidated(); } } } }
android custom-adapter autocompletetextview
Sriman
source share