带有List <string> </string>的Android AutoCompleteTextView

时间:2013-07-24 19:07:15

标签: android list adapter autocompletetextview

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

我在TextChangedListener添加了AutoCompleteTextView。在onTextChanged()事件中,执行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);

的AsyncTask:

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

我怎样才能让它发挥作用?有没有办法在列表中使用适配器?

1 个答案:

答案 0 :(得分:1)

没有显示任何内容的原因是因为列表为空并且在AsyncTask的onPostExecute中您唯一为您的suggestions引用分配新数组,您应该做的是使用适配器方法添加并删除元素。您可以尝试以下代码:

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

onPostExecute方法中。

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