Я пытаюсь узнать, отображается / скрывается раскрывающийся список AutoCompleteTextView . При нажатии кнопки я хочу показать раскрывающийся список (если он скрыт) и скрыть его (если он отображается). Для этого я использую метод isPopupShowing(), но он всегда возвращает FALSE .

Примере:

@Override
public void onClick(View view) {

    if (view.getId() == button.getId()) {

        if (autoCompleteTextView.isPopupShowing()) {
            autoCompleteTextView.dismissDropDown();
        } else {
            autoCompleteTextView.showDropDown();
        }   
    }   
}
4
Andrej Hafner 5 Май 2016 в 10:31

2 ответа

Лучший ответ

Когда AutoCompleteTextView теряет фокус, раскрывающийся список исчезает. Таким образом, раскрывающийся список всегда невидим, когда вы нажимаете кнопку.

Просто добавьте новое логическое свойство к вашему слушателю, чтобы запомнить последнее состояние.

3
cuihao 7 Сен 2016 в 08:52

Код на Котлине

val afill = findViewById<AutoCompleteTextView>(R.id.myTextId)
var showAFill = false

afill.addTextChangedListener (object : TextWatcher {
    override fun afterTextChanged(p0: Editable?) {
         showAFill = afill.isPopupShowing
    }
    override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
    }
    override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int)
    }
})

afill.onItemClickListener = object : AdapterView.OnItemClickListener {
    override fun onItemClick(parent: AdapterView<*>?, view: View, position: Int, id: Long) {
        showAFill = false
    }
}

Если вы нажмете на любой элемент в автозаполнении, он закроется.

showAutofill.setOnClickListener { _ ->
    if (showAFill) afill.dismissDropDown()
    else afill.showDropDown()
    showAFill = !showAFill
}

Показать автозаполнение - id моей кнопки на макете

0
Peter Kobzar 15 Апр 2019 в 07:23