1

我有一个AutoCompleteTextView用户输入地址的地方。我希望能够在他键入时在下面显示建议。为此,我通过反向地理编码 API 获得了可能的地址列表。然后我想向用户显示这个字符串列表(可能的地址)。就像谷歌地图应用一样。

TextChangedListenerAutoCompleteTextView. 如果执行onTextChanged()an 事件,AsyncTask其中可能的地址列表在onPostExecute().

autoText.addTextChangedListener(new TextWatcher() {
    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        new GeoTask().execute();
    }
});

尝试 1

这是列表:

static List<String> suggestionList = new ArrayList<String>();

这是适配器的代码AutoCompleteTextView

autoText.setThreshold(3);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, suggestionList);
autoText.setAdapter(adapter);
adapter.setNotifyOnChange(true);

使用上面的代码没有任何显示。

尝试 2

我还尝试使用数组作为适配器的参数,每次更新地址列表时,我都会将其转换为数组。

static String[] suggestions;
static List<String> suggestionList = new ArrayList<String>();

适配器:

autoText.setThreshold(3);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, suggestionList);
autoText.setAdapter(adapter);
adapter.setNotifyOnChange(true);

异步任务:

protected void onPostExecute(Void aVoid) {
...
suggestions = suggestionList.toArray(new String[suggestionList.size()]);
super.onPostExecute(aVoid);
}

我怎样才能让它工作?有没有办法将适配器与列表一起使用?

4

1 回答 1

1

什么都没有显示的原因是因为列表是空的,并且在onPostExecute您的 AsyncTask 中,您唯一将新数组分配给您的suggestions引用,您真正应该做的是使用适配器方法来添加和删除元素。你可以试试这段代码:

adapter.clear();
adapter.addAll(/*new collection of suggestions*/);

在你的onPostExecute方法中。

注意: adapter.addAll()方法仅出现在第 11 个 API 中,因此如果您使用 lower,则必须手动添加每个项目。

于 2013-07-24T19:36:13.407 回答