我有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);
}
我怎样才能让它发挥作用?有没有办法在列表中使用适配器?
答案 0 :(得分:1)
没有显示任何内容的原因是因为列表为空并且在AsyncTask的onPostExecute
中您唯一为您的suggestions
引用分配新数组,您应该做的是使用适配器方法添加并删除元素。您可以尝试以下代码:
adapter.clear();
adapter.addAll(/*new collection of suggestions*/);
在onPostExecute
方法中。
注意: adapter.addAll()
方法仅在第11个API中出现,因此如果您使用较低的,则必须手动添加每个项目。