我将 TextChangedListener
添加到 AutocompleteTextView
. 在 TextChangedListener
的 afterTextChanged()
中,我调用了 AsyncTask
,它从web加载数据(在活动开始时加载所有数据不是一个选项,因为列表可能非常大,所以它只是浪费流量) . AsyncTask
的 onPostExecute()
看起来像那样(我使用 ArrayAdapter
):
@Override
protected void onPostExecute(ArrayList<Subregion> result)
{
super.onPostExecute(result);
if (result != null)
{
adapter.clear();
for (Iterator<Subregion> iterator = result.iterator(); iterator.hasNext();)
{
Subregion subregion = iterator.next();
adapter.add(subregion);
}
adapter.notifyDataSetChanged();
autocompleteTextView.showDropDown();
}
}
Subregion
是我的自定义对象,覆盖 toString()
. 我希望我的程序在用户开始输入时开始加载数据,并在收到和解析它们时立即显示结果 .
我的问题:
autocompleteTextView.showDropDown()
无效 . onPostExecute()
收到正确的数据列表,它们被添加到适配器,但 showDropDown()
不是't show the dropdown. What'的事情?
3 回答
我正在做同样的事情,我刚刚实现了这个功能 . 不是清除适配器并单独构建它,而是将适配器设置如下(我在onPostExecute中调用的函数中执行此操作);
您不需要显式调用showdropdown,当适配器通知它数据已更改时,自动完成视图会自动更新 .
你也可以打电话
这使得无需打电话
见setNotifyOnChange希望我能提供帮助 .
我也遇到过这个问题 . 我的完成阈值是2.当输入2个字符时,我从服务器获取数据并填充了数组适配器,但
autoRailwayFrom.showDropDown();
没有显示下拉...我只是写在线,它的工作原理......
这个问题已得到解答,但我认为这不是一个好方法 - 关键是所有人都是可过滤的界面 . 这里有适配器的工作示例,基于BaseAdapter . 缺少这里的部分是沟通(我使用了Retrofit):