的Android AutoCompleteTextView显示已选定一个

问题描述:

我有我的AutoCompleteTextView问题,的Android AutoCompleteTextView显示已选定一个

enter image description here

当我选择的建议之一,

enter image description here

它应该显示的产品名称(垃圾食物或西餐)。 任何人都可以帮我解决这个问题。以下是适配器&过滤器类。

筛选类 公共类产品筛选延伸滤波器{ AdapterProductAutoComplete adapterProductAutoComplete; 列表originalList; 列表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(); 
    } 
} 

适配器类别

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

Product类覆盖toString()的方法,因为从AutoCompleteTextViewtoString()值。此代码添加到您的Product类: -

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

默认实现的toString()的Object类的方法是这样的: -

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

是你现在做了什么。

+0

非常感谢你!我的问题解决了。 – user2412351

+0

我反对一个新问题,它返回建议项目的位置,而不是正确的ID。假设它返回5条建议,我选择了第一条,但它会在字段中显示一个数组列表中的第一个,而不是我选择的那个。你明白吗? – user2412351

+0

使用'getItemAtPosition()'方法。代码: - autoComplete.setOnItemClickListener(新AdapterView.OnItemClickListener(){ @Override 公共无效onItemClick(适配器视图>适配器视图,视图视图,INT I,长L){ selectedProduct = adapterView.getItemAtPosition(I); } } ); –