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

5
这是我的问题: 在我的Android应用中,我使用AutoCompleteTextView并每5秒刷新项目列表。当我调用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();
    }
}

});

这个完美运行。


你如何更新自动完成适配器? - Arfan Mirza
1个回答

0

我也遇到了这个问题,我认为这似乎是一个bug,我通过以下方式解决了这个问题

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

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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接