填充listView异步

时间:2011-12-02 01:37:37

标签: android listview android-asynctask

这是我的问题:

我获得了手机的GPS坐标,我将它们与Google Directions API一起使用,以获得手机与我镇上一些建筑物之间的距离。建筑物位置存储在xml文件中。

我使用asyncTask循环所有建筑物坐标,并从谷歌api获取建筑物和手机之间的距离。

问题在于,有时当我有很多建筑物需要很长时间才能完成所有请求,然后显示清单,我想知道如何做到这一点:

每次请求完成后如何更新listView:

例如:第一次列表为空时,我向google api发出请求,我在列表中得到1个项目,然后是另一个请求。这样我就不需要等到所有请求都已完成。

我认为如果我有20个建筑坐标不是创建20个异步任务实例的解决方案。

谢谢你, 克特林

1 个答案:

答案 0 :(得分:0)

IMO在runOnUiThread()中调用notifyDataSetChanged()的最简单方法:

private class DownloadAsyncTask extends AsyncTask<Void, Recording, Void> {

  protected Void doInBackground(Void... parms) {
    for (DownloadTask task: tasks) {
      DownloadData downloadData = downloadSomething(task);
      runOnUiThread(new Runnable() {
        public void run() {
          listAdapter.add(downloadData);
          listAdapter.notifyDataSetChanged();
        }
      });
    }
  } // end of doInBackground()
}

希望有所帮助。