1

我在我的应用程序中使用 listView,其中每一行 listview 都从不同的 Web 服务获取数据。目前,我正在以下列方式执行此操作:

    public View getView(final int position, View convertView, ViewGroup parent) {
         ViewHolder viewHolder;
          ...
          ... 
          DownloadData downloadData = new DownloadData(viewHolder); 
          downloadData.execute();
          return convertView;
     }

    class DownloadData extends AsyncTask<Void,Void,Void> //Downloads and update viewHolder
    {
     .....
    }

它运行完美。但是,我觉得这不是一个好的设计,因为线程不应该在适配器内部完成。有更好的方法吗?

PS:我的网络服务有一个限制,我无法改变它来解决这个问题

4

1 回答 1

3

你绝对不想getView(). getView()实际上只是负责将一些对象转换为视图,而不负责获取您的数据。

我会确保在填充列表视图之前甚至期间拥有我需要的所有数据。

换句话说,在这个适配器之外,为什么不调用所有异步方法并让它们返回正确的对象以传递给适配器?

您可以等到它们全部完成,或者并行调用它们并在每个完成时更新适配器,然后调用notifyDatasetChanged().

于 2013-06-19T12:05:36.457 回答