Android AutoCompleteTextView显示所选的一个
我的AutoCompleteTextView有问题 当我选择一个建议时 它应该显示产品名称(垃圾食品或西餐)。 请任何人帮我解决这个问题。下面是适配器和过滤器类 过滤器类 公共类ProductFilter扩展了过滤器{ AdapterProductAutoComplete AdapterProductAutoComplete; 列表原创者; 列表过滤器列表Android AutoCompleteTextView显示所选的一个,android,autocompletetextview,Android,Autocompletetextview,我的AutoCompleteTextView有问题 当我选择一个建议时 它应该显示产品名称(垃圾食品或西餐)。 请任何人帮我解决这个问题。下面是适配器和过滤器类 过滤器类 公共类ProductFilter扩展了过滤器{ AdapterProductAutoComplete AdapterProductAutoComplete; 列表原创者; 列表过滤器列表 public ProductFilter (AdapterProductAutoComplete adapterProductA
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();
}
}
公共产品过滤器(AdapterProductAutoComplete AdapterProductAutoComplete,列表
(原创作家){
超级();
this.adapterProductAutoComplete=adapterProductAutoComplete;
this.originalist=originalist;
this.filteredList=新的ArrayList();
}
@凌驾
受保护的Filter.FilterResults性能过滤(CharSequence约束){
filteredList.clear();
最终FilterResults结果=新的FilterResults();
if(constraint==null | | constraint.length()==0){
filteredList.addAll(原始列表);
}否则{
final String filterPattern=constraint.toString().toLowerCase().trim();
对于(最终产品:原始列表){
如果(product.getProductName().toLowerCase()包含(filterPattern)| |整数
.toString(product.getProductId()).toLowerCase()包含(filterPattern)){
filteredList.add(产品);
}
}
}
results.values=filteredList;
results.count=filteredList.size();
返回结果;
}
@凌驾
受保护的void publishResults(CharSequence约束、FilterResults结果){
adapterProductAutoComplete.filteredProducts.clear();
adapterProductAutoComplete.filteredProducts.addAll((列表)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;
}
}
公共类AdapterProductAutoComplete扩展了ArrayAdapter{
私人最终产品清单;
public List filteredProducts=new ArrayList();
公共适配器产品自动完成(上下文、列表产品){
超级(上下文,0,产品);
这一点。产品=产品;
}
@凌驾
public int getCount(){
返回filteredProducts.size();
}
@凌驾
公共过滤器getFilter(){
返回新产品过滤器(此,产品);
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
Product Product=filteredProducts.get(位置);
LayoutInflater充气器=LayoutInflater.from(getContext());
convertView=充气机。充气(R.layout.list\u row\u actproduct,父项,false);
TextView tvCode=(TextView)convertView.findViewById(R.id.actproduct\u productcode);
TextView tvName=(TextView)convertView.findViewById(R.id.actproduct\u产品名称);
setText(Integer.toString(product.getProductId());
tvName.setText(product.getProductName());
返回视图;
}
}
重写产品
类中的toString()
方法,因为自动完成文本视图
从toString()
获取值。将此代码添加到您的产品
类:-
@Override
public String toString(){
return getProductName();
}
对象类中toString()方法的默认实现如下:-
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
这就是你现在得到的 我遇到一个新问题,它返回建议项位置而不是正确的ID。假设它返回5个建议,我选择第一个,但它将在字段中显示arraylist中的第一个,而不是我正在选择的。你明白吗?使用
getItemAtPosition()
方法。代码:-autoComplete.setOnItemClickListener(新AdapterView.OnItemClickListener(){@Override public void onItemClick(AdapterView AdapterView,View视图,int i,long l){selectedProduct=AdapterView.getItemAtPosition(i);}});请参考此链接中的图片。getItemAtPosition()仍然返回错误的数据。@user2412351请检查本页的完整示例。也许这对你有帮助。