【问题标题】:android - Updating ListView from AsyncTask called from custom adapter classandroid - 从自定义适配器类调用的 AsyncTask 更新 ListView
【发布时间】:2013-03-28 22:11:58
【问题描述】:

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

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

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

【问题讨论】:

  • 您将使用 Utilities 类参数化构造函数发送适配器实例,以在 onPostExecute 方法中调用 notifyDataSetChanged。你试过这种方式吗?
  • 不,这是我的问题。如何在 Utilities 类的构造函数中发送适配器实例?我知道这是一个简单的问题,但我被困住了。

标签: android android-asynctask adapter


【解决方案1】:

包含一个 Delegate 作为回调,以从原始类中激活刷新。

比如添加这个接口:

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

}

任务完成后会调用delegate,触发刷新!

【讨论】:

  • 谢谢,这正是我想要的。
  • 您可能希望将您的委托包装到 WeakReference 中,因为 MyClass 可能是一个活动或其他可以在您的任务运行时重新创建的东西(例如设备方向更改)。
【解决方案2】:

这是一个例子:

newslist 是一个 ArrayList。 nAdapter 是一个通用适配器。

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

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

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


        }

【讨论】:

  • 谢谢,我知道我应该在 onPostExecute() 方法中调用 notifyDataSetChanged()。问题是我不知道如何在 AsyncTask 中传递适配器实例,因为它们不在同一个类中。如果是,我可以创建一个全局适配器变量,然后我可以在 AsyncTask 中调用它。
  • 你不需要将适配器传递给 asynctask,你只需要完全按照你说的创建变量。
猜你喜欢
  • 2015-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-27
  • 2013-08-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多