Android AutoCompleteTextView:检测何时取消下拉列表且未选择项目
我需要知道用户何时点击AutoCompleteTextView下拉列表之外的按钮以关闭它(即,他们通过在列表中选择一个项目来关闭弹出窗口)。我已经设置了setOnDismissListener(),如下所示:Android AutoCompleteTextView:检测何时取消下拉列表且未选择项目,android,autocompletetextview,Android,Autocompletetextview,我需要知道用户何时点击AutoCompleteTextView下拉列表之外的按钮以关闭它(即,他们通过在列表中选择一个项目来关闭弹出窗口)。我已经设置了setOnDismissListener(),如下所示: mAutoView.setOnDismissListener(new AutoCompleteTextView.OnDismissListener() { @Override public void onDismiss() {
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()
aRunnable
inonDismiss()
适度延迟。使用onimclick()
中的removeCallbacks()
取消该Runnable
。如果Runnable
运行,您就知道在延迟期内没有收到相应的onItemClick()
。在短延迟期内,可靠性很差。但由于实际事件是由自动完成文本视图
中的列表PopupWindow
处理的,因此我不确定您是否有选择。如果用户点击下拉列表,我想显示一个小对话框,解释查找未列出项目的备选方案。正如你建议的那样,我考虑过增加一些延迟,但我担心这不可靠。我是java和Android新手,不知道怎么做,所以谢谢你让我加入Runnable。我想我将调整UI以消除对指令的需求。可能需要额外点击一两次,但希望更直观。谢谢。