-1

我需要在我的自定义 ListView 中显示用户的联系人图片。我可以通过 AsyncTask 获取图像,但我无法设置图像,因为在 AsyncTask 完成之前列表视图已经被加载。我正在为列表视图的每一行调用 AsycTask。AsyncTask 完成后,我手头有 Image Uri。请就如何做到这一点提供一些想法。

我正在使用自定义基本适配器来执行此操作。如果我使用 AsyncTask().get() 方法,我可以填充 ImageView,但它会阻塞 UI 线程并使 AsyncTask 的目的无效。

4

3 回答 3

0

onPostExecute()您可以在AsyncTask的方法中加载 ListView 。这样,您将保证 Async 任务将在加载 ListView 之前完成。

您可以在 AsyncTask 执行时显示ProgressDialog以让用户知道正在获取数据。

于 2012-12-03T10:01:13.990 回答
0

这取决于ListAdapter您使用的,但例如,如果您使用的是ArrayAdapter,我认为您可以调用ArrayAdapter.notifyDataSetChanged()它,它会重新加载您使用的所有(可见)视图ArrayAdapter.getView()

一个更复杂的选项是保存对ImageViews 的引用,但这会有点棘手,因为列表只保留可见列表行的视图。

于 2012-12-03T10:10:36.757 回答
0

最后我找到了问题所在。我的 AsyncTask 类的 onPostExecute() 方法在 doInBackground() 之后没有被执行。不调用它的原因是它只能接受 Object 参数,例如 onPostExecute(Object.. args)。我所有的图像设置代码都写在 onPostExecute() 中。

于 2012-12-05T06:47:43.033 回答