繁体   English   中英

android-从自定义适配器类调用的AsyncTask更新ListView

[英]android - Updating ListView from AsyncTask called from custom adapter class

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

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

如何在实用程序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();


        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM