पुराना सवाल, लेकिन अभी भी प्रासंगिक है। कुछ अन्य सवालों के मार्गदर्शन के बाद फ़िल्टर करने योग्य का उपयोग कर एक कस्टम एडाप्टर लागू किया। मैंने एक सरल जेनेरिक एडाप्टर बनाया है जिसमें खोज शामिल है। इस पर त्वरित नोट्स:
मैं तितली का उपयोग कर रहा हूं, लेकिन findviewbyid के साथ दर्शक को देखना आसान है।
लेआउट R.layout.list_item_simple टेक्स्टव्यू R.id.text_view_simple के साथ एक साधारण लेआउट है।
ऑब्जेक्ट को एक टॉस्ट्रिंग की आवश्यकता है जिसकी तुलना की जाएगी।
public class SimpleContainsAutocompleteAdapter <T> extends ArrayAdapter<T> implements Filterable {
private List <T> listObjects;
List<T> suggestions = new ArrayList<>();
private int resource;
private Filter mFilter = new Filter(){
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults filterResults = new FilterResults();
if(constraint != null) {
suggestions.clear();
for(T object : listObjects){
if(object.toString().toLowerCase().contains(constraint.toString().toLowerCase())){
suggestions.add(object);
}
}
filterResults.values = suggestions;
filterResults.count = suggestions.size();
}
return filterResults;
}
@Override
protected void publishResults(CharSequence contraint, FilterResults results) {
if(results == null){
return;
}
List<T> filteredList = (List<T>) results.values;
if(results.count > 0) {
clear();
for (T filteredObject : filteredList) {
add(filteredObject);
}
notifyDataSetChanged();
}
}
};
public SimpleContainsAutocompleteAdapter(Context context, List<T> listObjects) {
super(context, R.layout.list_item_simple, listObjects);
this.listObjects = new ArrayList<>(listObjects);
this.resource = R.layout.list_item_simple;
}
@Override
public Filter getFilter() {
return mFilter;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Object listObject = getItem(position);
viewHolder holder;
if(convertView != null) {
holder = (viewHolder) convertView.getTag();
}else{
convertView = LayoutInflater.from(getContext()).inflate(resource, parent, false);
holder = new viewHolder(convertView);
convertView.setTag(holder);
}
holder.name.setText(listObject.toString());
return convertView;
}
static class viewHolder {
@InjectView(R.id.text_view_simple) TextView name;
public viewHolder(View view) {
ButterKnife.inject(this, view);
}
}
}
स्रोत
2015-05-08 00:04:19
मैं इसी तरह यहाँ कुछ कर रहा हूँ !!! http://stackoverflow.com/questions/12854336/autocompletetextview-backed-by-cursorloader – toobsco42