Я создал собственный адаптер для AutoCompleteTextView.
package ...
import ...
public class CardSuggestionAdapter extends ArrayAdapter<String> implements Filterable {
private final LayoutInflater mInflater;
private Activity context;
private int mFieldId, mResource;
CardSuggestionAdapter(Activity context, String[] names) {
super(context, R.layout.card_suggestion, R.id.name_label, names);
this.context = context;
this.mFieldId = R.id.name_label;
this.mResource = R.layout.card_suggestion;
this.mInflater = LayoutInflater.from(context);
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
return createViewFromResource(mInflater, position, convertView, parent, mResource);
}
@NonNull
@Override
public Filter getFilter() {
return new CardsFilter();
}
private View createViewFromResource(@NonNull LayoutInflater inflater, int position, @Nullable
View convertView, @NonNull ViewGroup parent, int resource) {
View view = convertView;
final TextView text;
ViewHolder viewHolder;
if (convertView == null) {
view = inflater.inflate(resource, parent, false);
viewHolder = new ViewHolder(view);
view.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) view.getTag();
}
text = view.findViewById(mFieldId);
if (text == null) {
throw new RuntimeException("Failed to find view with ID "
+ context.getResources().getResourceName(mFieldId)
+ " in item layout");
}
final String item = getItem(position);
viewHolder.name.setText(item);
viewHolder.name.setTypeface(Typeface.createFromAsset(
MarsPDA.assetManager, "fonts/prototype.ttf"));
return view;
}
class ViewHolder {
TextView name;
ViewHolder(View v) {
name = v.findViewById(R.id.name_label);
}
}
private class CardsFilter extends Filter {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
if (constraint != null) {
final List<String> suggestions = new ArrayList<>();
final FilterResults fs = new FilterResults();
return fs;
} else {
return new FilterResults();
}
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
if (results != null && results.count > 0) {
notifyDataSetChanged();
} else {
notifyDataSetInvalidated();
}
}
}
}
Эта реализация performFiltering
, очевидно, исключает возможность отображения никаких предложений.
Я пытался скопировать метод performFiltering
из оригинальный класс ArrayAdapter
, а также некоторые другие реализации Filter
, найденные на этом форуме, но даже когда я добавляю буквально что-либо в список suggestions
и устанавливаю fs.values = suggestions;
и fs.count = suggestions.size();
, адаптер отображает всех участников массива names
, переданного в конструктор. Почему это происходит?