我有一个 AutoCompleteTextView,我想在其中搜索位置,例如:您键入“vig”,AutoCompleteTextView 列表显示了 5 个最佳结果:“4560 Vig”、“Juan Pablo Perez..”、“The Vig 4041.. .", "Vig" 另一个例子,你输入“vigo”:它说正确的地方:“Vigo, Pontevedra”,你可以选择它并把它放在 AutoCompleteTextView 上。
现在,我所拥有的工作几乎很好,但我有一个错误:
- 显示列表仅在您删除字符时显示,如果没有则不显示,它显示的是最后一个字符串结果,例如:您输入了“vigo”,没有出现任何内容,您删除了“o”和显示列表显示“vigo”而不是“vig”的结果,这是目前在 AutoCompleteTextView 中键入的内容。
我在 AsyncTask 中执行位置搜索:
private class SearchAddress extends AsyncTask<String, Void, String[]> {
@Override
protected String[] doInBackground(String... params) {
//adapter.clear();
String[] addressArray = getStreetList(query);
return addressArray;
}
@Override
protected void onPostExecute(String[] addressArray) {
if(addressArray == null)
Toast.makeText(NewRouteActivity.this, "No address obtained from server", Toast.LENGTH_SHORT).show();
else{
adapter.clear();
for(String address: addressArray){
adapter.add(address); <------HERE IS THE 2ND ERROR
Log.d("ASYNC", address);
}
}
}
@Override
protected void onPreExecute() {}
@Override
protected void onProgressUpdate(Void... values) {}
}
这是我的 AutoCompleteTextView 代码:
String[] array = {};
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, array);//simple_dropdown_item_1line
autoFrom.setAdapter(adapter);
autoTo.setAdapter(adapter);
asyncSearch = new SearchAddress();
autoFrom.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (((AutoCompleteTextView) autoFrom).isPerformingCompletion()) {return;}
if (s.length() < 2) {
return;
}else{
query = s.toString();
if (asyncSearch.getStatus().equals(AsyncTask.Status.FINISHED)){
asyncSearch = new SearchAddress();
asyncSearch.execute(query);
Log.d("ASYNC", "FINISH GOOD");
Log.d("ASYNC", query);
}else{
Log.d("ASYNC", "CANCEL");
asyncSearch.cancel(false);
asyncSearch = new SearchAddress();
asyncSearch.execute(query);
}
return;
}
}
});
我希望这已经足够了,getStreetList() 运行良好,取得了良好的效果。如果您需要其他东西,请询问。
提前致谢!!!