调用notifyDataSetChanged() 时如何禁用AutoCompleteTextView 中的下拉列表自动打开?

Mak*_*ele 6 android refresh autocompletetextview drop-down-menu

这是我的问题:

在我的 Android 应用程序中,我使用 AutoCompleteTextView 并每 5 秒刷新一次项目列表。当我调用notifyDataSetChanged() 时,刷新正在工作。但是当我在这里输入一些内容时,它会给我匹配项目的列表,然后我手动关闭它,当另一个线程刷新列表并调用notifyDataSetChanged()时,下拉列表会自动显示(即使我之前关闭了它)。这真的很烦人,因为如果列表很长,它会占据整个屏幕,关闭后它会在另外 5 秒内出现。我在调用notifyDataSetChanged()后尝试dismissDropDown(),但没有任何效果。看起来下拉菜单的显示有一点延迟。这也不是修复它的好方法,因为如果用户没有关闭列表,它会在刷新后关闭。也尝试转移焦点——仍然没有效果。

所以我需要一种方法:更新我的项目列表(通过notifyDataSetChanged())而不自动显示下拉列表,但如果下拉列表已经显示,则不要关闭它。

希望你能帮忙,

干杯


我终于做到了。我在这里发布一个解决方案,也许有人会使用这个。

检查下拉菜单是否可见:

final boolean isVisible = autocomplete.isPopupShowing();
Run Code Online (Sandbox Code Playgroud)

接下来,调用notifyDataSetChanged(),

最后:

new Handler().post(new Runnable(){

@Override
public void run() {
    if(!isVisible){
        autocomplete.dismissDropDown();
    }
}

});
Run Code Online (Sandbox Code Playgroud)

这非常有效。

Nas*_*Nas 1

我也遇到了这个问题,我觉得是个bug,我通过以下方式解决了这个问题

首先将 AutoCompleteTextView focusable 属性设置为 false。

其次,在该视图的 onTouch 事件中将 AutoCompleteTextView focusable 属性更改为 true。为此,您必须为 AutoCompleteTextview 实现 onTouchListener。

每当您触及 AutoCompleteTextView 时,您都应该将 focusable 属性更改为 true,否则将其 focusable 属性设置为 false。这样当视图处于不可聚焦状态时,下拉列表永远不会出现。

仅当视图处于可聚焦状态时,它才会自动显示下拉列表,这对用户来说很烦人,否则效果很好。