-1

을 기반으로 필터링, 나는 다음과 같은 오전 코드는자동 완성 텍스트를 편집이 내 응용 프로그램에서 자동 완성 작업을 수행하는 예를 다음하고 두 개의 서로 다른 데이터 열

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    mList = retrievePeople(); 
    txtSearch = (AutoCompleteTextView) findViewById(R.id.txt_search); 
    txtSearch.setThreshold(1); 
    adapter = new PeopleAdapter(this, R.layout.activity_main, R.id.lbl_name, mList); 
    txtSearch.setAdapter(adapter); 
} 

private List<People> retrievePeople() { 
    List<People> list = new ArrayList<People>(); 
    list.add(new People("James", "Bond", 1)); 
    list.add(new People("Jason", "Bourne", 2)); 
    list.add(new People("Ethan", "Hunt", 3)); 

    return list; 
} 

입니다 그리고 어댑터는 여기

public PeopleAdapter(Context context, int resource, int textViewResourceId, List<People> items) { 
    super(context, resource, textViewResourceId, items); 
    this.context = context; 
    this.resource = resource; 
    this.textViewResourceId = textViewResourceId; 
    this.items = items; 
    tempItems = new ArrayList<People>(items); // this makes the difference. 
    suggestions = new ArrayList<People>(); 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View view = convertView; 
    if (convertView == null) { 
     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     view = inflater.inflate(R.layout.row_people, parent, false); 
    } 
    People people = items.get(position); 
    if (people != null) { 
     TextView lblName = (TextView) view.findViewById(R.id.lbl_name); 
     if (lblName != null) 
      lblName.setText(people.getName()); 
    } 
    return view; 
} 

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

/** 
* Custom Filter implementation for custom suggestions we provide. 
*/ 
Filter nameFilter = new Filter() { 
    @Override 
    public CharSequence convertResultToString(Object resultValue) { 
     String str = ((People) resultValue).getFirstName(); 
     return str; 
    } 

    @Override 
    protected FilterResults performFiltering(CharSequence constraint) { 
     if (constraint != null) { 
      suggestions.clear(); 
      for (People people : tempItems) { 
       if (people.getFirstName().toLowerCase().contains(constraint.toString().toLowerCase())) { 
        suggestions.add(people); 
       } 
      } 
      FilterResults filterResults = new FilterResults(); 
      filterResults.values = suggestions; 
      filterResults.count = suggestions.size(); 
      return filterResults; 
     } else { 
      return new FilterResults(); 
     } 
    } 

    @Override 
    protected void publishResults(CharSequence constraint, FilterResults results) { 
     List<People> filterList = (ArrayList<People>) results.values; 
     if (results != null && results.count > 0) { 
      clear(); 
      for (People people : filterList) { 
       add(people); 
       notifyDataSetChanged(); 
      } 
     } 
    } 
}; 

입니다 이름을 기반으로 검색이 일어나고 있지만 이름과 성 모두를 기준으로 검색이 이루어지기를 원합니다. 둘째 이름과 성이 필터에 나타나야합니다. 친절하게 도움을 주셔서 감사합니다. // Android 기기, : 이름을 확인하는 동안

+0

사용이 라이브러리 아래로, 또 하나의 조건을 추가 arsenal.com/details/1/2863 –

답변

1

것은 https://github.com/nntuyen/auto-fill-edit-text HTTPS

for (People people : tempItems) { 
    if (people.getFirstName().toLowerCase().contains(constraint.toString().toLowerCase() 
     || people.getLastName().toLowerCase().contains(constraint.toString().toLowerCase())) { 
      suggestions.add(people); 
     } 
}