Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android AutoCompleteTextView显示所选的一个_Android_Autocompletetextview - Fatal编程技术网

Android AutoCompleteTextView显示所选的一个

Android AutoCompleteTextView显示所选的一个,android,autocompletetextview,Android,Autocompletetextview,我的AutoCompleteTextView有问题 当我选择一个建议时 它应该显示产品名称(垃圾食品或西餐)。 请任何人帮我解决这个问题。下面是适配器和过滤器类 过滤器类 公共类ProductFilter扩展了过滤器{ AdapterProductAutoComplete AdapterProductAutoComplete; 列表原创者; 列表过滤器列表 public ProductFilter (AdapterProductAutoComplete adapterProductA

我的AutoCompleteTextView有问题

当我选择一个建议时

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

过滤器类 公共类ProductFilter扩展了过滤器{ AdapterProductAutoComplete AdapterProductAutoComplete; 列表原创者; 列表过滤器列表

    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请检查本页的完整示例。也许这对你有帮助。