Настройте AutoCompleteTextView для отображения проблем с выбором изображений и текста - PullRequest
0 голосов
/ 11 июля 2020

Я создал настраиваемый ArrayAdapter для моего раскрывающегося списка AutoCompleteTextView, фильтрация и все работает нормально, но он выбирает другой элемент, переопределяя его через AdapterView. Это мой код.


    private List<Brand> brands = new ArrayList<Brand>();
    private List<Brand> filterBrands = new ArrayList<Brand>();

    public BrandAdapter(Context context,List<Brand> brands) {
        super(context, 0, brands);
        this.brands = brands;
    }

    @Override
    public int getCount() {
        return filterBrands.size();
    }

    @NonNull
    @Override
    public Filter getFilter() {
        return new BrandFilter(this,brands);
    }

    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        Brand brnd = filterBrands.get(position);
        LayoutInflater inflater = LayoutInflater.from(getContext());
        convertView = inflater.inflate(R.layout.dropdownbrand,parent,false);

        TextView tvbname = (TextView)convertView.findViewById(R.id.bnm);
        TextView tvbid = (TextView)convertView.findViewById(R.id.bid);
        tvbname.setText(brnd.getBrname());
        tvbid.setText(brnd.getBrid());
        return convertView;
    }

    private class BrandFilter extends Filter{
        BrandAdapter adapter;
        List<Brand> originalList;
        List<Brand> filterList;
        public BrandFilter(BrandAdapter adapter, List<Brand> originalList) {
            super();
            this.adapter = adapter;
            this.originalList = originalList;
            this.filterList = new ArrayList<>();
        }

        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            filterList.clear();
            final FilterResults results = new FilterResults();
            if (constraint == null || constraint.length() == 0){
                filterList.addAll(originalList);
            }else {
                final String filterPattern = constraint.toString().toLowerCase().trim();
                for (final Brand br : originalList){
                    if (br.getBrname().toLowerCase().contains(filterPattern)){
                        filterList.add(br);
                    }
                }
            }
            results.values = filterList;
            results.count = filterList.size();
            return results;
        }
        @Override
        protected void publishResults(CharSequence constraint, FilterResults results) {
            adapter.filterBrands.clear();
            adapter.filterBrands.addAll((List)results.values);
            adapter.notifyDataSetChanged();
        }
    }
}

, но когда я щелкаю свои элементы и выбираю их по положению, он выбирает позицию из оригинального, а не из отфильтрованного списка.

autoCompleteTextView.setAdapter(new BrandAdapter(getApplicationContext(),brndList));
autoCompleteTextView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                Brand bb = (Brand) adapterView.getItemAtPosition(i);
                autosrc.setText("");
                sid.setText(bb.getBrid());
                sname.setText(bb.getBrname());
            }
        });

Я не могу найти ошибку, как решить эту проблему, пожалуйста, помогите мне

...