Have you looked at AutoCompleteTextView?
It does the display of what you want. Now all you need is an adapter that implements Filterable to generate the set of five. Filterable says that an entity will be able to create a Filter object. Filter objects use a thread pool and dispatch the filtering on a separate worker thread and the binding to the view on the UI thread.
So let's say we have
public class TextAdapter extends BaseAdapter implements Filterable {
List<String> myList;
Filter myFilter;
TextAdapter(String[] strings) {
myList = Arrays.asList(strings);
myFilter = new MyFilter(myList);
}
...
// implement the BaseAdapter methods as needed to manage the list.
//
public void setContents(List<String> strs) {
myList.clear();
myList.addAll(strs);
mFilter = new Filter(myList);
}
public Filter getFilter() {
return myFilter;
}
private final class MyFilter implements Filter {
final List<String> mOriginalList;
public MyFilter(List<String> list) {
mOriginalList = new ArrayList<String>(list);
}
public Filter.FilterResults performFiltering(CharSequence constraint) {
// Search through your original list
Filter.FilterResults results = new Filter.FilterResults();
List<String> strs = new ArrayList<String>();
if (TextUtils.isEmpty(constraint)) {
strs.addAll(myOriginalList);
}
for (String str : myOriginalList) {
if (matches(str, constraint)) {
strs.add(str);
}
}
if (results.size > 5) {
// prune the list to your own tastes
}
results.count = strs.size();
results.value = strs;
}
public void publishResults(CharSequence constraint, Filter.FilterResults results)
setContents((List<String>)results.value);
notifyDatasetChanged();
}
public boolean matches(String str, CharSequence value) {
/// implement this part
}
}
}