Получение текущего предложения от AutoCompleteTextView - PullRequest
7 голосов
/ 17 октября 2010

Как вы получаете текущее топ предложение в 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
        }
    });

Ответы [ 2 ]

16 голосов
/ 25 октября 2010

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

@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

1 голос
/ 24 октября 2010

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

.. до конца методаexecuteFiltering:

  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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...