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

时间:2012-03-12 14:54:22

标签: android drop-down-menu refresh autocompletetextview

这是我的问题:

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

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

希望你能提供帮助,

欢呼声


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

检查下拉列表是否可见:

final boolean isVisible = autocomplete.isPopupShowing();

接下来,调用notifyDataSetChanged(),

最后:

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

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

});

这很有效。

1 个答案:

答案 0 :(得分:0)

我也有这个问题,我认为这似乎是一个错误,我通过以下方式解决了这个问题

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

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

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

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