2016-12-14 1 views
1

Ich habe Probleme mit meinem AutoCompleteTextView,Android AutoCompleteTextView Anzeige der gewählten ein

enter image description here

Wenn ich wählen Sie eine der Vorschlag,

enter image description here

Sie der Name des Produkts zeigen sollte (Junk Essen oder westliche Küche). Bitte helfen Sie mir, das zu lösen. Unten ist Adapter & Filterklasse.

Filterklasse public class Produktfilter erweitert Filter { AdapterProductAutoComplete adapterProductAutoComplete; Liste originalListe; Liste gefiltertListe;

public ProductFilter (AdapterProductAutoComplete adapterProductAutoComplete, List<Product> 
      originalList){ 
     super(); 
     this.adapterProductAutoComplete = adapterProductAutoComplete; 
     this.originalList = originalList; 
     this.filteredList = new ArrayList<>(); 
    } 

    @Override 
    protected Filter.FilterResults performFiltering (CharSequence constraint){ 
     filteredList.clear(); 
     final FilterResults results = new FilterResults(); 

     if(constraint == null || constraint.length() == 0){ 
      filteredList.addAll(originalList); 
     }else{ 
      final String filterPattern = constraint.toString().toLowerCase().trim(); 
      for (final Product product : originalList){ 
       if(product.getProductName().toLowerCase().contains(filterPattern) || Integer 
         .toString(product.getProductId()).toLowerCase().contains(filterPattern)){ 
        filteredList.add(product); 
       } 
      } 
     } 
     results.values = filteredList; 
     results.count = filteredList.size(); 
     return results; 
    } 

    @Override 
    protected void publishResults(CharSequence constraint, FilterResults results) { 
     adapterProductAutoComplete.filteredProducts.clear(); 
     adapterProductAutoComplete.filteredProducts.addAll((List) results.values); 
     adapterProductAutoComplete.notifyDataSetChanged(); 
    } 
} 

Adapter Klasse

public class AdapterProductAutoComplete extends ArrayAdapter<Product>{ 
    private final List<Product> products; 
    public List<Product> filteredProducts = new ArrayList<>(); 

    public AdapterProductAutoComplete(Context context, List<Product> products){ 
     super(context, 0, products); 
     this.products = products; 
    } 

    @Override 
    public int getCount(){ 
     return filteredProducts.size(); 
    } 

    @Override 
    public Filter getFilter(){ 
     return new ProductFilter(this, products); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent){ 
     Product product = filteredProducts.get(position); 
     LayoutInflater inflater = LayoutInflater.from(getContext()); 
     convertView = inflater.inflate(R.layout.list_row_actproduct, parent, false); 
     TextView tvCode = (TextView) convertView.findViewById(R.id.actproduct_productcode); 
     TextView tvName = (TextView) convertView.findViewById(R.id.actproduct_productname); 

     tvCode.setText(Integer.toString(product.getProductId())); 
     tvName.setText(product.getProductName()); 
     return convertView; 
    } 
} 

Antwort

1

Aufschalten toString() Methode in Ihrer Product Klasse, weil AutoCompleteTextView nimmt Wert von toString(). Fügen Sie diesen Code in Ihre Product Klasse: -

@Override 
public String toString(){ 
    return getProductName(); 
} 

Die Standardimplementierung von toString() -Methode in Objektklasse ist dies: -

public String toString() { 
    return getClass().getName() + "@" + Integer.toHexString(hashCode()); 
} 

es ist, was Sie bekommen jetzt.

+0

Vielen Dank !! Mein Problem lösen. – user2412351

+0

Ich begegne einem neuen Problem, es gibt die Vorschlagsposition statt der richtigen ID zurück. Lassen Sie es sagen, dass es 5 Vorschlag zurückgibt, wähle ich das erste, aber es wird im Feld das erste in einer arraylist, nicht das anzeigen, das ich wähle. Verstehst du? – user2412351

+0

Verwenden Sie die 'getItemAtPosition()' Methode. Code: - autoComplete.setOnItemClickListener (neu AdapterView.OnItemClickListener() { @Override public void onItemClick (AdapterView adapterView, Ansicht Ansicht, int i, lange l) { selectedProduct = adapterView.getItemAtPosition (i);} }); –

Verwandte Themen