Reputation: 23
I have some technical problems here, for example I have an adapter for autocomplete textbox that contains this list, [ Bahrain, Belarus, Bahamas]. If I typed for example "ah", I want to display in the drop-down of autocomplete_textbox these two, [Bahrain, Bahamas], since those two contains a substring of "ah" (B"ah"amas and B"ah"rain).
Please help me, been figuring this out for a week. :(
Here's my code:
Inside onCreate() method of my main activity:
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
countries = getResources().getStringArray(R.array.countries_array);
textView = (AutoCompleteTextView) findViewById(R.id.autocomplete_country);
TextWatcher textChecker = new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// TODO Auto-generated method stub
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
String enteredText = textView.getText().toString();
refreshList(enteredText);
textView.showDropDown();
}
};
textView.addTextChangedListener(textChecker);
}
public void refreshList(String text) {
adapter = new ArrayAdapter<String>(this, R.layout.list_item, fetchTop20(countries, text));
textView.setThreshold(1);
textView.setAdapter(adapter);
}
public List<String> fetchTop20(String[] countries, String strToFind){
List<String> arrList_countries = Arrays.asList(countries);
List<String> arrList_strTop20 = new ArrayList<String>();
int ctrToTwenty = 0;
for(String currCountry: arrList_countries)
{
if(currCountry.toLowerCase().contains(strToFind.toLowerCase()))
{
arrList_strTop20.add(currCountry);
ctrToTwenty++;
}
if(ctrToTwenty == 20)
{
break;
}
}
Log.i(TAG, "strToFind: "+ strToFind);
Log.i(TAG, "strTop20: "+arrList_strTop20);
return arrList_strTop20;
}
My AutoCompleteTextBox's adapter do contains a List with [Bahamas, Bahrain] inside, but its actual suggestion contains nothing. This works if you typed "Bah"(though you should type the first letter of the word for it to display):(.
Any suggestion android experts?, also, since my code's autocomplete filtering isn't running in a separate thread, please tell me how to optimize this or show me how to thread this code for optimization. thanks.
Upvotes: 0
Views: 7806
Reputation: 4093
Just answering the question in the title...
Custom AutoComplete in Android
http://developer.android.com/resources/tutorials/views/hello-autocomplete.html
--
After reading the whole question posted...
Looking at the docs, it looks like the solution is to make a custom ListAdapter
with a custom Filter
.
Google searching for a few seconds turned up an example of using a custom Filter
: Autocomplete items disappearing
Upvotes: 1