![](/img/trans.png)
[英]adapter.notifyDataSetChanged() not working in android
[英]Android adapter.notifyDataSetChanged() not working?
我正在编写一个应用程序,需要从用户那里获取输入,将其传递给服务器,该服务器返回一个JSON字符串,然后在ListView中显示其解析的内容。 我正在通过扩展AsyncTask来实现这一目标:
//stripped down version
public class main extends ListActivity {
ArrayList<String> listItems = new ArrayList<String>();
ArrayAdapter<String> adapter;
final EditText input = (EditText)findViewById(R.id.input);
input.addTextChangedListener(new TextWatcher() {
public void onTextChanged(CharSequence s, int start, int before, int count) {
if(!input.getText().toString().equals("")) {
new GetDataTask().execute(input.getText().toString());
}
}
});
private class GetDataTask extends AsyncTask<String, Void, ArrayList<String>> {
protected ArrayList<String> doInBackground(String... query) {
URL url = new URL("http://myserversaddressgoeshere.com/search/thequerygoeshere");
URLConnection conn = url.openConnection();
BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
ArrayList<String> items = new ArrayList<String>();
//the code that parses the JSON goes here; it writes some strings to items
return items;
}
protected void onPostExecute(ArrayList<String> items) {
listItems = items;
adapter.notifyDataSetChanged();
}
}
}
(这是我的第一篇文章,所以如果我尝试使代码块失败,我会事先道歉)
在onPostExecute方法中,在设置listItems等于items之后,如果我打印listItems的内容,它们就是我想要的。 但是,由于某种原因,当从onPostExecute执行时,adapter.notifyDataSetChanged()似乎什么都不做(当它从主线程调用时,它工作正常)。
如果有人知道发生了什么和/或如何解决它,我真的很感激。 谢谢!
你能试试吗
protected void onPostExecute(ArrayList<String> items) {
listItems.clear();
listItems.addAll(items);
adapter.notifyDataSetChanged();
}
而且我希望你已经做了这件事
adapter = new ArrayAdapter<String>(listItems);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.