Android AutoCompleteTextView:检测何时取消下拉列表且未选择项目

Android AutoCompleteTextView:检测何时取消下拉列表且未选择项目,android,autocompletetextview,Android,Autocompletetextview,我需要知道用户何时点击AutoCompleteTextView下拉列表之外的按钮以关闭它(即,他们通过在列表中选择一个项目来关闭弹出窗口)。我已经设置了setOnDismissListener(),如下所示: mAutoView.setOnDismissListener(new AutoCompleteTextView.OnDismissListener() { @Override public void onDismiss() {

我需要知道用户何时点击AutoCompleteTextView下拉列表之外的按钮以关闭它(即,他们通过在列表中选择一个项目来关闭弹出窗口)。我已经设置了setOnDismissListener(),如下所示:

    mAutoView.setOnDismissListener(new AutoCompleteTextView.OnDismissListener() {
        @Override
        public void onDismiss() {
            CharSequence msg = "isPerformingCompletion = " + mAutoView.isPerformingCompletion() +
                    "   Item selected at = " + mAutoView.getListSelection();
            Toast.makeText(getContext(), msg, Toast.LENGTH_LONG).show();
        }
    });
还有一个像这样的听众:

 private AdapterView.OnItemClickListener mAutocompleteClickListener
        = new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        // get selected item and pass it to result callback
    }
};
private AdapterView.OnItemClickListener mauto完成clicklistener
=新AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
//获取所选项目并将其传递给结果回调
}
};
onDismiss事件在onItemClick事件之前激发,不幸的是,“isPerformingCompletion()”和“getListSelection()”方法都不会返回值,直到onItemClick事件激发为止


有人能提出一种方法来检测不选择列表的取消吗?

下面的代码将检测到,如果用户取消autocompletetextview下拉列表,则onDismiss将使用地理代码API检查所选输入,如果有结果,则所选输入有效,否则输入无效,因此在这种情况下,输入的文本将在位秒内消失

mAutoView.setOnDismissListener {
    try {
        val fromLocationName = Geocoder(context).getFromLocationName(mAutoView.getText().toString(), 1)
        if (fromLocationName != null && fromLocationName.isNotEmpty()) {
            Log.d(TAG, "Address valid")
        } else {
            mAutoView.setText("")
            Log.d(TAG, "Address not valid")
        }
    } catch (e: Exception) {
        mAutoView.setText("")
        Log.d(TAG, "Address not valid with Exception")
    }
}

意味着您需要OnDismiss中的一种验证器,它将检查输入文本是否有效,根据验证,您可以向用户指示输入的输入是否有效。

在这种情况下,您打算怎么做?如果不需要细粒度的计时,可以使用典型的计时黑客
postDelayed()
a
Runnable
in
onDismiss()
适度延迟。使用
onimclick()
中的
removeCallbacks()
取消该
Runnable
。如果
Runnable
运行,您就知道在延迟期内没有收到相应的
onItemClick()
。在短延迟期内,可靠性很差。但由于实际事件是由
自动完成文本视图
中的
列表PopupWindow
处理的,因此我不确定您是否有选择。如果用户点击下拉列表,我想显示一个小对话框,解释查找未列出项目的备选方案。正如你建议的那样,我考虑过增加一些延迟,但我担心这不可靠。我是java和Android新手,不知道怎么做,所以谢谢你让我加入Runnable。我想我将调整UI以消除对指令的需求。可能需要额外点击一两次,但希望更直观。谢谢。