【发布时间】:2013-11-20 10:48:27
【问题描述】:
问题描述:
我在使用 AutoCompleteTextView 时遇到了一些问题,我必须在每次按键后显示建议。 问题是,建议列表是动态的,就像谷歌的建议功能一样。 这意味着应在用户不断输入时添加新建议,并应显示所有匹配的旧建议。
例如
我写“te”,然后它应该显示以前的建议,如“test1”和“test2”,以及我将从 Web API 获得的新建议。假设 web api 给了我“茶”和“紧张”这个词。
现在 AutoCompleteTextView 将有“te”作为字符串,下面显示所有四个建议。
这正是我想要的。
看起来很简单,但它表现出一种奇怪的行为。
我正在使用全局声明的默认 ArrayAdapter 类实例。
arrayAdapter=new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line,suggestions);
word.setAdapter(arrayAdapter);
建议是 ArrayList。
从 WebApi 获得新结果后,我只需调用
arrayAdapter.notifyDataSetChanged();
刷新数据观察者和附加的视图(在我们的例子中是 AutoCompleteListView)。
但它会关闭建议。
当我不使用 notifyDataSetChanged(); 时,它会显示所有建议,无论我输入了什么字符。
我尝试了许多建议的自定义过滤器,但没有一个有用,因为我无法使用 notifyDataSetChanged()。
我张贴图片以避免混淆。
我很困惑为什么notifyDataSetChanged(); 不起作用。我没有使用具有相同 arrayAdapter 实例的任何其他列表引用。我真的怀疑这是否是一个参考问题。
【问题讨论】:
-
何时以及如何将网络结果添加到适配器?
-
@pskink:我将它添加到 ArrayList 的建议中。然后我调用 notifyDataSetChanged()。我在从 WebApi 获取结果的 Asynctask 的 postExecute() 中执行此操作。
-
您应该在适配器过滤器的 performFilteting/publishResults 方法中执行此操作
-
我没试过。让我检查一下。
-
或者您可以使用现有的过滤器,如 CursorFilter 及其与 CursorAdapter 的集成,请参阅下面的答案
标签: android autocompletetextview notifydatasetchanged android-filterable