我想用来自网络的数据填充我的AutoComplete textView。但是,尽管asynctask返回了正确的数据,但autocompletetextview并未更新。你能帮我解决这个问题吗? 活性
public class FirstTab extends Activity implements OnClickListener,GetStreetNamesInterface{
private ArrayAdapter<String> adapterStreenNames;
private List<String> streetList = new ArrayList<String>();
private AutoCompleteTextView userInput;
userInput = (AutoCompleteTextView) promptsView
.findViewById(R.id.editTextDialogUserInput);
adapterStreenNames = new ArrayAdapter<String>(FirstTab.this,
android.R.layout.simple_list_item_1, streetList);
userInput.setAdapter(adapterStreenNames);
userInput
.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent,
View view, int position, long id) {
UILApplication.street = userInput.getText()
.toString();
}
});
userInput.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
GetStreetNames task = new GetStreetNames(FirstTab.this);
task.execute(s.toString());
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
@Override
public void onGetStreetNamesInterface(List<String> result) {
if(result!=null && result.size()>0){
streetList.clear();
streetList.addAll(result);
adapterStreenNames.notifyDataSetChanged();
Log.d("streets","updated");
for(String s:streetList){
Log.d("streets",s);
}
}
}
的AsyncTask
public class GetStreetNames extends AsyncTask<String,Void,String> {
private GetStreetNamesInterface callback;
public GetStreetNames(GetStreetNamesInterface callback){
this.callback=callback;
}
@Override
protected String doInBackground(String... params) {
UserFunctions u = new UserFunctions();
return u.getStreetName(params[0]);
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
List<String> options = new ArrayList<String>();
if(result!=null && result.length()>0){
String[] parts = result.split("\n");
for (int i=0; i<parts.length;i+=2){
String[] element = parts[i].split("\\|");
options.add(element[1]);
}
callback.onGetStreetNamesInterface(options);
}
else{
callback.onGetStreetNamesInterface(null);
}
}
}
接口
public interface GetStreetNamesInterface {
public void onGetStreetNamesInterface(List<String> result);
}
答案 0 :(得分:0)
将您的方法修改为: -
public void onGetStreetNamesInterface(List<String> result) {
if(result!=null && result.size()>0){
streetList.clear();
streetList.addAll(result);
//adapterStreenNames.notifyDataSetChanged();
adapterStreenNames = new ArrayAdapter<String>(FirstTab.this,
android.R.layout.simple_list_item_1, streetList);
userInput.setAdapter(adapterStreenNames);
Log.d("streets","updated");
for(String s:streetList){
Log.d("streets",s);
}
}