【发布时间】:2017-03-23 21:03:25
【问题描述】:
我需要知道用户何时在 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();
}
});
还有一个像这样的 OnItemClickListener:
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
}
};
onDismiss 事件在 onItemClick 事件之前触发,不幸的是,在 onItemClick 事件触发之前,“isPerformingCompletion()”和“getListSelection()”方法都不会返回值。
任何人都可以建议一种无需列表选择即可检测解雇的方法吗?
【问题讨论】:
-
在这种情况下你打算做什么?如果您不需要细粒度的计时,您可以使用典型的计时技巧。
postDelayed()RunnableinonDismiss()用于适度的延迟期。在onItemClick()中使用removeCallbacks()取消Runnable。如果Runnable运行,您就知道您在延迟期内没有收到相应的onItemClick()。可靠性很差,延迟时间很短。但由于实际事件由AutoCompleteTextView中的ListPopupWindow处理,我不确定您是否有选择。 -
如果用户点击下拉菜单,我想显示一个小对话框来解释查找未列出项目的替代方法。正如您所建议的,我考虑过添加某种延迟,但我担心它不可靠。我是 java 和 Android 的新手,不知道该怎么做,所以感谢你让我进入 Runnable。我想我将调整 UI 以消除对指令的需求。可能需要额外点击一两次,但希望更直观。谢谢。
标签: android autocompletetextview