我想通过从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数组。)

最佳答案

这就是我更新AutoCompleteTextView的方式:

String[] data = terms.toArray(new String[terms.size()]);  // terms is a List<String>
ArrayAdapter<?> adapter = new ArrayAdapter<Object>(activity, android.R.layout.simple_dropdown_item_1line, data);
keywordField.setAdapter(adapter);  // keywordField is a AutoCompleteTextView
if(terms.size() < 40) keywordField.setThreshold(1);
else keywordField.setThreshold(2);

当然,现在这是静态的,不会处理无线建议,但是,我也建议您在将适配器分配给AutoCompleteTextView之后通知适配器有关更改:
adapter.notifyDataSetChanged();

希望这可以帮助。

-serkan

10-07 19:14
查看更多