Я создал настраиваемый 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());
}
});
Я не могу найти ошибку, как решить эту проблему, пожалуйста, помогите мне