问题是由于下拉列表的项没有正确匹配到传递给适配器的过滤器。为了解决这个问题,您需要重写适配器的getFilter()方法,确保正确过滤下拉列表的项。
以下是代码示例:
ArrayAdapter adapter = new ArrayAdapter(this,
android.R.layout.simple_dropdown_item_1line, items) {
@Override
public Filter getFilter() {
Filter filter = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults filterResults = new FilterResults();
if (constraint != null) {
ArrayList suggestions = new ArrayList();
for (String item : items) {
if (item.toLowerCase().startsWith(constraint.toString().toLowerCase())) {
suggestions.add(item);
}
}
filterResults.values = suggestions;
filterResults.count = suggestions.size();
}
return filterResults;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
if (results != null && results.count > 0) {
List filteredList = (List) results.values;
clear();
for (String c : filteredList) {
add(c);
}
notifyDataSetChanged();
}
}
};
return filter;
}
};
这里的items是一个String数组,作为下拉列表的列表项。在这个示例中,我们重写了ArrayAdapter的getFilter()方法,并添加了自定义过滤器。这个自定义过滤器将对每个项进行过滤,确保只有以用户输入的字符开头的项才会被显示在下拉列表中。最后,在调用适配器的notifyDataSetChanged()方法之前,需要先清除当前可见的项。
这样,当用户开始输入时,下拉列表中的项将自动匹配并过滤,确保正确的项被选择。