我在我的应用程序中使用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
{
.....
}
它完美运行。 但是,我觉得这不是一个好的设计,因为线程不应该在适配器内完成。有更好的方法吗?
P.S:我的网络服务有一个限制,我不能改变它来解决这个问题
答案 0 :(得分:3)
您绝对不希望在getView()
中执行此操作。 getView()
实际上只负责将某些对象转换为视图,而不负责获取数据。
我会确保在列表视图的填充之前或之后我都需要所有数据。
换句话说,在这个适配器之外为什么不调用所有的异步方法并让它们返回正确的对象以传递给适配器?
您可以等到它们全部完成,或者并行调用它们并在每个完成时更新适配器,然后拨打notifyDatasetChanged()
。