Android AutoCompleteTextView退格问题

Android AutoCompleteTextView退格问题,android,autocompletetextview,backspace,Android,Autocompletetextview,Backspace,任何人都可以找出我代码中的问题所在 当我按下退格键时,我的AutoCompleteTextView有奇怪的行为。首先,当我在文本框中键入时,它将显示正确的值。例如,我有一个字符串列表,即“Pallanos”、“Palana”、“Pandor”、“Pasdi” 当我键入Pal时,将显示Pallanos和Palana。但是当我按下退格时,建议下拉框是而不是刷新。我应该有四个结果,即上面的字符串 这是我的适配器 class EmployeeAdapter extends ArrayAdapter<

任何人都可以找出我代码中的问题所在

当我按下退格键时,我的AutoCompleteTextView有奇怪的行为。首先,当我在文本框中键入时,它将显示正确的值。例如,我有一个字符串列表,即“Pallanos”、“Palana”、“Pandor”、“Pasdi

当我键入Pal时,将显示PallanosPalana。但是当我按下退格时,建议下拉框是而不是刷新。我应该有四个结果,即上面的字符串

这是我的适配器

class EmployeeAdapter extends ArrayAdapter<EmployeeDetails>{

Context context; 
int layoutResourceId;
ArrayList<EmployeeDetails> data;
ArrayList<EmployeeDetails> objects;
//EmployeeDetails data[] = null;

public EmployeeAdapter(Context c, int paramlayoutResourceId, ArrayList<EmployeeDetails> collection) { //EmployeeDetails[] collection) {
    super(c, paramlayoutResourceId, collection);
    this.layoutResourceId = paramlayoutResourceId;
    this.context = c;
    this.data = collection;
    this.objects = collection;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View row = convertView;

    if(row == null) {
        LayoutInflater inflater = ((Activity)context).getLayoutInflater();
        row = inflater.inflate(layoutResourceId, null);
    }

    EmployeeDetails emp = data.get(position);
    Departments dept = new Departments(context);
    AccountTypes accType = new AccountTypes(context);

    ((TextView) row.findViewById(R.id.tvMainHeader)).setText(emp.getFirstName() + ", " + emp.getLastName());
    ((TextView) row.findViewById(R.id.tvSubHeader)).setText(dept.GetDepartmentName(emp.getDepartmentID()).toString() + " - " + accType.GetAccountTypeName(emp.getAccountTypeID()).toString());
    ((ImageView) row.findViewById(R.id.imgHeader)).setImageResource(R.drawable.id_card);

    return row;
}

@Override
public Filter getFilter() {
    //return nameFilter;

    Filter nameFilter = new Filter() {

        public String convertResultToString(Object resultValue) {
            String str = ((EmployeeDetails)(resultValue)).getLastName();
            return str;
        }

        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            ArrayList<EmployeeDetails> suggestions = new ArrayList<EmployeeDetails>();
            FilterResults filterresults = new FilterResults();

            if (constraint != null) {
                suggestions.clear();

                for (EmployeeDetails employee : objects) {
                    if (employee.getLastName().toLowerCase().startsWith(constraint.toString().toLowerCase())) {
                        suggestions.add(employee);
                    }
                }

                filterresults.values = suggestions;
                filterresults.count = suggestions.size();
            }

            return filterresults; 
        }

        @Override
        @SuppressWarnings("unchecked")
        protected void publishResults(CharSequence constraint, FilterResults results) {
            ArrayList<EmployeeDetails> filteredList = (ArrayList<EmployeeDetails>) results.values;

            if (filteredList != null && filteredList.size() > 0) {
                clear();
                for (EmployeeDetails employee : filteredList) {
                    add(employee);
                }
                notifyDataSetChanged();
            } else {
                notifyDataSetInvalidated();
            }
        }
    };

    return nameFilter;
} 
}

我找到了解决问题的办法。但是有点慢。如果有人可以优化,请随时发布您的答案。:)

我没有将
对象
this.objects=collection
)变量等价于构造函数中的变量,而是将其放入
performFiltering
中。这个想法是每次
performFiltering
方法触发时刷新
对象
变量

有些人在TextView中添加
TextWatcher
,以刷新适配器

下面是我修改的perFormFiltering

            protected FilterResults performFiltering(CharSequence constraint) {
            EmployeeDetails empFunction = new EmployeeDetails(context);
            ArrayList<EmployeeDetails> suggestions = new ArrayList<EmployeeDetails>();
            FilterResults filterresults = new FilterResults();

            if (constraint != null) {
                suggestions.clear();
                objects = empFunction.GetAllEmployees();
                for (EmployeeDetails employee : objects) {
                    if (employee.getLastName().toLowerCase().startsWith(constraint.toString().toLowerCase())) {
                        suggestions.add(employee);
                    }
                }

                filterresults.values = suggestions;
                filterresults.count = suggestions.size();
            }

            return filterresults; 
        }
protectedfilterResults性能过滤(字符序列约束){
EmployeeDetails empFunction=新的EmployeeDetails(上下文);
ArrayList建议=新建ArrayList();
FilterResults FilterResults=新的FilterResults();
if(约束!=null){
建议。清晰();
objects=empFunction.GetAllEmployees();
for(EmployeeDetails员工:对象){
if(employee.getLastName().toLowerCase().startsWith(constraint.toString().toLowerCase())){
建议。添加(员工);
}
}
filterresults.values=建议;
filterresults.count=建议.size();
}
返回过滤器结果;
}
谢谢

            protected FilterResults performFiltering(CharSequence constraint) {
            EmployeeDetails empFunction = new EmployeeDetails(context);
            ArrayList<EmployeeDetails> suggestions = new ArrayList<EmployeeDetails>();
            FilterResults filterresults = new FilterResults();

            if (constraint != null) {
                suggestions.clear();
                objects = empFunction.GetAllEmployees();
                for (EmployeeDetails employee : objects) {
                    if (employee.getLastName().toLowerCase().startsWith(constraint.toString().toLowerCase())) {
                        suggestions.add(employee);
                    }
                }

                filterresults.values = suggestions;
                filterresults.count = suggestions.size();
            }

            return filterresults; 
        }