2012-12-13 77 views
0

任何人都可以确定我的代码中存在什么问题。AutoCompleteTextView退格问题

当按下退格键时,我的AutoCompleteTextView有奇怪的行为。起初,当我在文本框中输入时,它会显示正确的值。比如我有串的名单即 “Pallanos”, “帕拉纳”, “潘多尔”, “Pasdi”。

当i型帕尔然后Pallanos帕拉纳将显示。但是当我按退格键建议的保存箱是不是刷新。我应该有四个结果,即上面的字符串。

我的继承人适配器

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; 
} 
} 

下面的代码展示如何,我在我的AutoCompleteTextView

EmployeeAdapter adapter = new EmployeeAdapter(this, R.layout.list_row, empFunction.GetAllEmployees()); 

    AutoCompleteTextView empAuto = (AutoCompleteTextView)findViewById(R.id.auto_Employee); 
    empAuto.setThreshold(1); 
    empAuto.setAdapter(adapter); 

回答

0

使用适配器,我发现我对我的问题的解决方案。但它有点慢。如果有人可以优化,然后随意发布您的答案。 :)

而是等同我的构造函数中objectthis.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; 
     } 

感谢