AutoCompleteTextView - 更新适配器时,下拉自动关闭

时间:2021-03-11 12:56:07

标签: android kotlin autocompletetextview

我使用 MaterialAutoCompleteTextView,当我添加新项目并调用 notifyDataSetChanged() 时,下拉菜单会自动关闭

如何解决这个问题

视频: https://drive.google.com/file/d/1AYWW-_HcIpefrn0RcPMx2EsLLoyB2TtY/view?usp=sharing

代码:

class MainActivity : AppCompatActivity() {

    private lateinit var materialAutoComplete: MaterialAutoCompleteTextView
    private lateinit var adapter: CustomArrayAdapter

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        materialAutoComplete = findViewById(R.id.materialAutoComplete_main)

        setupMaterialAutoComplete()
    }

    private var number = 0

    private fun setupMaterialAutoComplete() {
        val items = mutableListOf("Shop", "Shop", "Shop", "Shop")
        adapter = CustomArrayAdapter(
                this,
                R.layout.item_goods_material_auto_complete,
                items
        )
        materialAutoComplete.setAdapter(adapter)

        object : CountDownTimer(3000, 1000) {
            override fun onTick(millisUntilFinished: Long) {

            }

            override fun onFinish() {
                number += 1
                adapter.addAll(mutableListOf("$number", "${number + 1}"))
            }

        }.start()
    }
}

1 个答案:

答案 0 :(得分:0)

只需覆盖此方法

class MaterialAutoCompleteTextViewWithoutAutoCloseDropdown : MaterialAutoCompleteTextView {

    constructor(context: Context) : super(context)

    constructor(context: Context, attributeSet: AttributeSet?) : super(context, attributeSet)

    constructor(
        context: Context, attributeSet: AttributeSet?, defStyleAttr: Int,
    ) : super(context, attributeSet, defStyleAttr)

    override fun dismissDropDown() {
    }

    override fun onKeyPreIme(keyCode: Int, event: KeyEvent): Boolean {
        if (keyCode == KeyEvent.KEYCODE_BACK && isPopupShowing) {
            if (event.action == KeyEvent.ACTION_DOWN && event.repeatCount == 0) {
                val state = keyDispatcherState
                state?.startTracking(event, this)
                return true
            } else if (event.action == KeyEvent.ACTION_UP) {
                val state = keyDispatcherState
                state?.handleUpEvent(event)
                if (event.isTracking && !event.isCanceled) {
                    super.dismissDropDown()
                    return true
                }
            }
        }
        return super.onKeyPreIme(keyCode, event)
    }

    override fun replaceText(text: CharSequence?) {
        clearComposingText()
        setText(text)
        val spannable = getText()
        Selection.setSelection(spannable, spannable.length)
        super.dismissDropDown()
    }
}
相关问题