Подтвердить что ты не робот

Как я могу избежать выпадающего списка автозаполнения, появляющегося при программном наборе текста?

В моем макете есть AutoCompleteTextView. У меня также есть альтернативный способ выбора тех же элементов, которые присутствуют в AutoCompleteTextView. Когда выбран альтернативный способ, я заполняю значение в AutoCompleteTextView с помощью:

autoCompleteTextView.setText(valueFromAlternativeSource);

где valueFromAlternativeSource - одна из допустимых опций автоматического завершения. Проблема заключается в том, что выпадение автозаполнения появляется при вызове setText. Помещение следующей строки после вышеописанного не работает:

autoCompleteTextView.dismissDropDown();  //Doesn't work.  Why?

Любые идеи о том, почему увольнение dropdown не работает, или другие способы отклонить выпадающее меню?

4b9b3361

Ответ 1

Это работает отлично для меня и менее сложно:

ListAdapter adapter = autoCompleteTextView.getAdapter();
autoCompleteTextView.setAdapter(null);
autoCompleteTextView.setText("whatever");
autoCompleteTextView.setAdapter(adapter);

Ответ 2

Похоже, проблема связана с порядком обработки сообщений. Моя работа выглядит так:

//autoCompleteTextView.dismissDropDown();
new Handler().post(new Runnable() {
    public void run() {
        autoCompleteTextView.dismissDropDown();
}});

Ответ 3

Если вы хотите поддерживать API < 17, Подкласс AutoCompleteTextview и переопределить метод setText(text, filter)

@Override
public void setText(CharSequence text, boolean filter) {
    if(Build.VERSION.SDK_INT>=17) {
        super.setText(text, filter);
    }else{
        if(filter){
            setText(text);
        }else{
            ListAdapter adapter = getAdapter();
            setAdapter(null);
            setText(text);
            if(adapter instanceof ArrayAdapter)
                setAdapter((ArrayAdapter) adapter);
            else
                setAdapter((CursorAdapter) adapter);
            //if you use more types of Adapter you can list them here
        }
    }
}

Затем всякий раз, когда вы хотите установить текст вручную, вызовите setText(text, false)

Ответ 4

Мое решение (но мне это не нравится, должно быть что-то лучше):

autoCompleteTextView.setText(valueFromAlternativeSource);
autoCompleteTextView.setDropDownHeight(0);

autoCompleteTextView.setOnKeyListener(new OnKeyListener(){

   @Override
   public boolean onKey(View v, int keyCode, KeyEvent event) {
       autoCompleteTextView.setDropDownHeight(LayoutParams.WRAP_CONTENT);
   }
}

Ответ 5

autoCompleteTextView.setText(valueFromOtherMeans, filter);

     * @param filter If <code>false</code>, no filtering will be performed
     *        as a result of this call.