gpt4 book ai didi

android - 动态更新 AutoCompleteTextView 适配器

转载 作者:IT王子 更新时间:2023-10-29 00:10:55 24 4
gpt4 key购买 nike

我想通过从 RESTful Web 服务获取列表来定期更改 AutoCompleteTextview 给出的建议,但无法使其顺利运行。我设置了一个硬编码的建议列表,以确保它正常工作:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.list_item, new String[] {"Hi", "Ho"});
speciesName.setAdapter(adapter);//my autocomplete tv

我在 textview 上有一个 TextWatcher,当文本更改时,它会启动一个非阻塞调用以获取新的建议列表——这部分获取新列表的工作正常。然后我想重置适配器,如下所示:

public void setOptionsAndUpdate(String[] options) {
Log.d(TAG, "setting options");
//speciesName.setAdapter((ArrayAdapter<String>)null);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.list_item, options);
speciesName.setAdapter(adapter);
}

此方法被调用,但不起作用 - 尽管调用了 setAdapter,但建议列表要么消失,要么显示的建议保持不变。

这甚至是正确的方法吗?我查看了 SimpleCursorAdapter 但看不到如何将我的 Web 服务注册为内容提供者。 (格式为 http://www.blah.com/query?term=XX,其中 XX 是我的应用程序的输入,响应是 JSON 字符串数组。)

最佳答案

在适配器中动态添加和更改数据时,我没有使用adapter.notifyDataSetChanged()。在我的情况下,我正在异步访问外部 api 并定期获取完成数据列表。

此代码清除适配器,并按照您的预期添加新数据。但是,我不得不调用 getFilter().Filter 方法来强制显示数据。此外,我必须根据 AutocompleteTextView 中的当前文本显式过滤,因为我的 api 调用是异步的。

adapter.clear();
for (Map<String, String> map : completions) {
adapter.add(map.get("name"));
}

//Force the adapter to filter itself, necessary to show new data.
//Filter based on the current text because api call is asynchronous.
adapter.getFilter().filter(autocompleteTextView.getText(), null);

关于android - 动态更新 AutoCompleteTextView 适配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8093023/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com