的Android AutoCompleteTextView显示已选定一个
问题描述:
我有我的AutoCompleteTextView问题,的Android AutoCompleteTextView显示已选定一个
当我选择的建议之一,
它应该显示的产品名称(垃圾食物或西餐)。 任何人都可以帮我解决这个问题。以下是适配器&过滤器类。
筛选类 公共类产品筛选延伸滤波器{ 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()
的方法,因为从AutoCompleteTextView
取toString()
值。此代码添加到您的Product
类: -
@Override
public String toString(){
return getProductName();
}
默认实现的toString()的Object类的方法是这样的: -
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
是你现在做了什么。
非常感谢你!我的问题解决了。 – user2412351
我反对一个新问题,它返回建议项目的位置,而不是正确的ID。假设它返回5条建议,我选择了第一条,但它会在字段中显示一个数组列表中的第一个,而不是我选择的那个。你明白吗? – user2412351
使用'getItemAtPosition()'方法。代码: - autoComplete.setOnItemClickListener(新AdapterView.OnItemClickListener(){ @Override 公共无效onItemClick(适配器视图>适配器视图,视图视图,INT I,长L){ selectedProduct = adapterView.getItemAtPosition(I); } } ); –