2016-12-14 2 views
1

J'ai problème avec mon AutoCompleteTextView,Android AutoCompleteTextView afficher le choosen un

enter image description here

Quand je choisis une de la suggestion,

enter image description here

Il doit indiquer le nom du produit (indésirable Nourriture ou nourriture occidentale). Quelqu'un s'il vous plaît aidez-moi à résoudre ce problème. Ci-dessous l'adaptateur & Classe de filtre.

Filtre Classe FiltreProduit public class {étend filtre AdapterProductAutoComplete adapterProductAutoComplete; Liste originaleListe; Liste filteredList;

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(); 
    } 
} 

classe Adaptateur

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; 
    } 
} 

Répondre

1

Remplacer méthode toString() dans votre classe Product parce AutoCompleteTextView prend la valeur de toString(). Ajouter ce code à votre Product classe: -

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

La mise en œuvre par défaut de la méthode toString() dans la classe d'objets est la suivante: -

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

est ce que vous obtenez maintenant.

+0

Merci beaucoup !! Mon problème à résoudre. – user2412351

+0

Je contré un nouveau problème, il retourne la position de l'item de suggestion au lieu de l'ID correct. disons que je renvoie la suggestion 5, je choisis le premier, mais il affichera dans le champ le premier dans un arrayliste, pas celui que je choisis. Comprenez vous? – user2412351

+0

utilise la méthode 'getItemAtPosition()'. Code: - autoComplete.setOnItemClickListener (nouveau AdapterView.OnItemClickListener() { @Override publique vide onItemClick (AdapterView adapterView, Vue vue, i int, long l) { selectedProduct = adapterView.getItemAtPosition (i);} }) –