Java AutoCompleteTextView显示错误的结果

Java AutoCompleteTextView显示错误的结果,java,android,android-arrayadapter,android-adapter,autocompletetextview,Java,Android,Android Arrayadapter,Android Adapter,Autocompletetextview,这是:我正在键入“di”,但AutoCompleteTextView正在显示不相关的内容 我是这样开始的: autocompleteAdapter = new AutoCompleteDropdownAdapter(MainActivity.activity, android.R.layout.simple_list_item_1, autoCompleteStrings); etSearch.setAdapter(autocompleteAdapter); 这是我的适配器(我尝试了标准的A

这是:我正在键入“di”,但AutoCompleteTextView正在显示不相关的内容

我是这样开始的:

autocompleteAdapter = new AutoCompleteDropdownAdapter(MainActivity.activity,
android.R.layout.simple_list_item_1, autoCompleteStrings);
etSearch.setAdapter(autocompleteAdapter);
这是我的适配器(我尝试了标准的ArrayAdapter,但结果是一样的)

类AutoCompleteDropdownAdapter扩展ArrayAdapter实现可过滤{
活动主体;
行内布局;
列出字符串;
私有ArrayList原始值;
专用阵列滤波器;
公共AutoCompleteDropdownAdapter(活动主、int行布局、列表字符串){
超级(主、行布局、字符串);
this.main=main;
this.rowLayout=rowLayout;
this.strings=字符串;
originalValues=新的ArrayList(字符串);
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
返回super.getView(position、convertView、parent);
}
@凌驾
公共过滤器getFilter(){
if(filter==null){
过滤器=新的阵列过滤器();
}
回流过滤器;
}
私有类ArrayFilter扩展筛选器{
私有对象锁;
@凌驾
受保护的筛选器结果执行筛选(字符序列前缀){
FilterResults results=新的FilterResults();
if(originalValues==null){
已同步(锁定){
originalValues=新的ArrayList(字符串);
}
}
if(prefix==null | | prefix.length()==0){
已同步(锁定){
ArrayList=新的ArrayList(原始值);
结果.值=列表;
results.count=list.size();
}
}否则{
最后一个字符串prefixString=prefix.toString().toLowerCase();
ArrayList值=原始值;
int count=values.size();
ArrayList newValues=新ArrayList(计数);
for(int i=0;i0){
notifyDataSetChanged();
}否则{
notifyDataSetionValidated();
}
}
}

现在,当我调试publishResults方法时,它正好显示了我需要的两个结果,但尽管如此,AutoCompleteTextView还是会下拉错误列表,我想您可以从这个示例中找到一些提示:

public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u recipe\u 033);
ArrayAdapter=新的ArrayAdapter(此,
android.R.layout.simple_下拉列表_项目_1行,国家/地区);
AutoCompleteTextView v=(AutoCompleteTextView)
findViewById(R.id.auto\u complete\u text\u view);
v、 设置适配器(适配器);
}
公用作废按钮单击(查看){
AutoCompleteTextView v=(AutoCompleteTextView)
findViewById(R.id.auto\u complete\u text\u view);
Toast.makeText(this,v.getText(),Toast.LENGTH_SHORT).show();
}

类阵列过滤器扩展过滤器:

更改: if(item.toLowerCase()包含(前缀字符串)){

致:
如果(item.toLowerCase().startsWith(prefixString)){

您是否使用充气器并将文本设置到下拉项?如果您跳过某些内容,请添加适配器的所有代码否,它只是super.getView()
class AutoCompleteDropdownAdapter extends ArrayAdapter<String> implements Filterable {

    Activity main;
    int rowLayout;
    List<String> strings;

    private ArrayList<String> originalValues;
    private ArrayFilter filter;

    public AutoCompleteDropdownAdapter(Activity main, int rowLayout, List<String> strings) {
        super(main, rowLayout, strings);
        this.main = main;
        this.rowLayout = rowLayout;
        this.strings = strings;
        originalValues = new ArrayList<String>(strings);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        return super.getView(position, convertView, parent);
    }

    @Override
    public Filter getFilter() {
        if (filter == null) {
            filter = new ArrayFilter();
        }
        return filter;
    }

    private class ArrayFilter extends Filter {
        private Object lock;

        @Override
        protected FilterResults performFiltering(CharSequence prefix) {
            FilterResults results = new FilterResults();

            if (originalValues == null) {
                synchronized (lock) {
                    originalValues = new ArrayList<String>(strings);
                }
            }

            if (prefix == null || prefix.length() == 0) {
                synchronized (lock) {
                    ArrayList<String> list = new ArrayList<String>(originalValues);
                    results.values = list;
                    results.count = list.size();
                }
            } else {
                final String prefixString = prefix.toString().toLowerCase();

                ArrayList<String> values = originalValues;
                int count = values.size();

                ArrayList<String> newValues = new ArrayList<String>(count);

                for (int i = 0; i < count; i++) {
                    String item = values.get(i);
                    if (item.toLowerCase().contains(prefixString)) {
                        newValues.add(item);
                    }

                }

                results.values = newValues;
                results.count = newValues.size();
            }

            return results;
        }

        @SuppressWarnings("unchecked")
        @Override
        protected void publishResults(CharSequence constraint, FilterResults results) {

        if(results.values!=null){
            ArrayList<String> tempStrings = (ArrayList<String>) results.values;
            strings.clear();
            strings.addAll(tempStrings);
        }else{
            strings = new ArrayList<String>();
        }
            if (results.count > 0) {
                notifyDataSetChanged();
            } else {
                notifyDataSetInvalidated();
            }
        }
    }
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_recipe_033);

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_dropdown_item_1line, COUNTRIES);
    AutoCompleteTextView v = (AutoCompleteTextView)
            findViewById(R.id.auto_complete_text_view);
    v.setAdapter(adapter);
}

public void onButtonClick(View view) {
    AutoCompleteTextView v = (AutoCompleteTextView)
            findViewById(R.id.auto_complete_text_view);
    Toast.makeText(this, v.getText(), Toast.LENGTH_SHORT).show();
}