Android AutoComplete TextBox, задаете свои конкретные предложения? - PullRequest
0 голосов
/ 25 апреля 2011

У меня есть некоторые технические проблемы здесь, например, у меня есть адаптер для текстового поля автозаполнения, который содержит этот список, [Бахрейн, Беларусь, Багамские Острова]. Если я набрал, например, «ах», я хочу отобразить в выпадающем списке 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? Кроме того, поскольку фильтрация автозаполнения моего кода не выполняется в отдельном потоке, расскажите, пожалуйста, как это оптимизировать, или покажите, как использовать этот код для оптимизации. спасибо.

1 Ответ

1 голос
/ 25 апреля 2011

Просто отвечая на вопрос в заголовке ...

Пользовательское автозаполнение в Android

http://developer.android.com/resources/tutorials/views/hello-autocomplete.html

-

После прочтения всего вопроса ...

Глядя на документы, похоже, что решение состоит в том, чтобы создать пользовательский ListAdapter с пользовательским Filter.

В поиске Google на несколько секунд появился пример использования пользовательского Filter: Исчезновение автозаполнения

...