当用户输入AutoCompleteTextView时,我希望从Web服务中获取一些结果并将其显示在框中。
为此我全球宣布
ArrayAdapter<String> adapter;
autoCompleteText;
ArrayList<String> searchList;
我把它放在我的onCreate()中。 searchList是一个ArrayList,我将从Web服务中获取结果。 Search()是我的网络服务搜索。我希望它在用户输入至少3个字符后搜索,以便我在字段上使用TextWatcher。
adapter = new ArrayAdapter<String>(MyActivity.this
, android.R.layout.simple_list_item_1, searchList);
autoCompleteText.setAdapter(adapter);
autoCompleteText.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) {
if (s.length() >= 3) {
new Search().execute(null, null, null);
}
}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
});
来自Search()的方法 - 在我更新searchList的AsyncTask中的GET请求
@Override
protected void onPostExecute(final Void unused) {
dlg.dismiss();
if (result != null) {
try {
JSONObject myJson = new JSONObject(result.substring(4));
JSONObject resp = myJson.getJSONObject("response");
for (Iterator<String> iterator = resp.keys(); iterator.hasNext();) {
String key = iterator.next();
System.out.println(key + " = " + resp.getString(key));
if(! searchList.contains(resp.getString(key)))
searchList.add(resp.getString(key));
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
}
我更喜欢使用ArrayAdapter而不是CustomAdapter。有什么想法吗?
答案 0 :(得分:0)
更改列表后,尝试在onPostExecute()中调用notifyDataSetChanged()。
答案 1 :(得分:0)
这是我更新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();