У меня есть некоторые технические проблемы здесь, например, у меня есть адаптер для текстового поля автозаполнения, который содержит этот список, [Бахрейн, Беларусь, Багамские Острова]. Если я набрал, например, «ах», я хочу отобразить в выпадающем списке autocomplete_textbox эти два, [Бахрейн, Багамские Острова], поскольку эти два содержат подстроку «ах» (B «ах» amas и B «ах» дождь).
Пожалуйста, помогите мне, выяснить это в течение недели. (
Вот мой код:
Внутри метода onCreate () моей основной деятельности:
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;
}
Адаптер моего AutoCompleteTextBox содержит список с [Багамскими островами, Бахрейн] внутри, но его фактическое предложение ничего не содержит. Это работает, если вы ввели «Бах» (хотя вы должны ввести первую букву слова, чтобы оно отображалось): (.
Есть предложения экспертов по Android? Кроме того, поскольку фильтрация автозаполнения моего кода не выполняется в отдельном потоке, расскажите, пожалуйста, как это оптимизировать, или покажите, как использовать этот код для оптимизации. спасибо.