我正在尝试从 AsyncTask 更新 ListView。我有这种情况:
- 活动类从自定义适配器类创建列表适配器。
- Adapter 类在列表项的元素上设置 onClickListener,并调用位于不同 Utilities 类中的 AsyncTask。
如何从 Utilities AsyncTask 中的 onPostExecute() 方法调用 notifyDataSetChanged?
我正在尝试从 AsyncTask 更新 ListView。我有这种情况:
如何从 Utilities AsyncTask 中的 onPostExecute() 方法调用 notifyDataSetChanged?
包括一个委托作为回调,以从原始类中激活刷新。
比如添加这个接口:
public interface AsyncDelegate {
public void asyncComplete(boolean success);
}
然后,在您的调用类中,实现接口并将其传递给您的任务
public class MyClass implements AsyncDelegate {
// Class stuff
MyAsyncTask newTask = new MyAsyncTask(this);
newTask.execute();
public void asyncComplete(boolean success){
myAdapter.notifyDataSetChanged();
}
在 AsyncTask 中,返回结果:
private class MyAsyncTask extends AsyncTask<Object, Object, Object> {
private AsyncDelegate delegate;
public MyAsyncTask (AsyncDelegate delegate){
this.delegate = delegate;
}
@Override
protected void onPostExecute(String result) {
delegate.asyncComplete(true);
}
}
当任务完成时,它会调用委托,这将触发刷新!
这是一个例子:
新闻列表是一个 ArrayList。nAdapter 是一个通用适配器。
所以首先你清除你的列表,然后添加你所有的新内容。之后,您对您的适配器说您的内容已更改。
@Override
protected void onPostExecute(ArrayList<HashMap<String, String>> list) {
newsList.clear();
newsList.addAll(list);
nAdapter.notifyDataSetChanged();
}