1

我正在尝试从 AsyncTask 更新 ListView。我有这种情况:

  • 活动类从自定义适配器类创建列表适配器。
  • Adapter 类在列表项的元素上设置 onClickListener,并调用位于不同 Utilities 类中的 AsyncTask。

如何从 Utilities AsyncTask 中的 onPostExecute() 方法调用 notifyDataSetChanged?

4

2 回答 2

11

包括一个委托作为回调,以从原始类中激活刷新。

比如添加这个接口:

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);
   }

}

当任务完成时,它会调用委托,这将触发刷新!

于 2013-03-28T22:38:05.933 回答
0

这是一个例子:

新闻列表是一个 ArrayList。nAdapter 是一个通用适配器。

所以首先你清除你的列表,然后添加你所有的新内容。之后,您对您的适配器说您的内容已更改。

@Override
        protected void onPostExecute(ArrayList<HashMap<String, String>> list) {

        newsList.clear();
            newsList.addAll(list);
            nAdapter.notifyDataSetChanged();


        }
于 2013-03-28T22:28:49.713 回答