Получение текущего предложения от `AutoCompleteTextView`

Как вы получаете текущее верхнее предложение в AutoCompleteTextView ? У меня есть предложение об элементах, и у меня есть зарегистрированный текстовый редактор. У меня также есть список на том же экране. Когда они печатаются, я хочу прокрутить список до текущего «лучшего» предложения. Но я не могу понять, как получить доступ к текущим предложениям или, по крайней мере, высшему предложению. Думаю, я ищу что-то вроде AutoCompleteTextView.getCurrentSuggestions() :

 autoCompleteTextView.addTextChangedListener(new TextWatcher() { public void onTextChanged(CharSequence s, int start, int before, int count) { String currentText = autoCompleteTextView.getText(); String bestGuess = autoCompleteTextView.getCurrentSuggestions()[0]; // ^^^ mewthod doesn't exist doSomethingWithGuess(bestGuess); } public void beforeTextChanged(CharSequence s, int start, int count, int after) { // do nothing } public void afterTextChanged(Editable s) { // do nothing } }); 

Solutions Collecting From Web of "Получение текущего предложения от `AutoCompleteTextView`"

Я сделал то, что вы хотите сделать со следующим кодом:

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.autocomplete_1); adapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, COUNTRIES); AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.edit); textView.setAdapter(adapter); adapter.registerDataSetObserver(new DataSetObserver() { @Override public void onChanged() { super.onChanged(); Log.d(TAG, "dataset changed"); Object item = adapter.getItem(0); Log.d(TAG, "item.toString "+ item.toString()); } }); } 

Item.toString напечатает текст, отображаемый в первом элементе.

Обратите внимание, что это произойдет, даже если вы пока не покажете всплывающее окно (предложения). Кроме того, вы должны проверить, есть ли какие-либо элементы, которые прошли критерии фильтра (например, ввод пользователя).

Чтобы решить первую проблему:

  int dropDownAnchor = textView.getDropDownAnchor(); if(dropDownAnchor==0) { Log.d(TAG, "drop down id = 0"); // popup is not displayed return; } //do stuff 

Чтобы решить вторую проблему, используйте getCount> 0

AutoCompleteTextView не прокручивает вниз до наилучшего выбора, но сужает выбор по мере ввода. Вот пример этого: http://developer.android.com/resources/tutorials/views/hello-autocomplete.html

Как я вижу из AutoCompleteTextView, нет возможности получить текущий список предложений.

Единственный способ, похоже, написать собственную версию ArrayAdapter и передать ее в AutoCompleteTextView.setAdapter (..). Вот источник для ArrayAdapter . Вы должны только изменить метод во внутреннем классе ArrayFilter.performFiltering (), чтобы он отображал FilterResults:

.. добавить поле во внутренний класс ArrayFilter:

 public ArrayList<T> lastResults; //add this line 

.. перед тем конец способ производитсяFiltering:

  lastResults = (ArrayList<T>) results; // add this line return results; } 

Используя его так (адаптированный пример из ссылки):

 AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.autocomplete_country); CustomArrayAdapter<String> adapter = new CustomArrayAdapter<String>(this, R.layout.list_item, COUNTRIES); textView.setAdapter(adapter); // read suggestions ArrayList<String> suggestions = adapter.getFilter().lastResult;