我有一个通过重新设置列表视图的适配器来刷新列表视图的方法。适配器在设置时为每个列表项下载缩略图图像。
我想在新线程上运行名为refreshListView()的方法,以便异步下载图像,但我知道我无法在单独的线程上更新UI。
有哪些替代方法可以做到这一点?
提前致谢。
答案 0 :(得分:4)
您可以使用AsyncTask(http://developer.android.com/reference/android/os/AsyncTask.html)或Loader(http://developer.android.com/guide/topics/fundamentals/loaders.html)。我建议使用装载机,因为它似乎总是更容易。两者都是(除其他外)为这类问题而设计的。
要在低于3.0的任何目标平台上使用Loader,请参阅http://developer.android.com/sdk/compatibility-library.html。
答案 1 :(得分:2)
以下是整个代码。
http://stackoverflow.com/questions/541966/android-how-do-i-do-a-lazy-load-of-images-in-listview/559781#559781
答案 2 :(得分:1)
AsyncTask也可用于协调具有UI元素更新的后台作业:
http://developer.android.com/reference/android/os/AsyncTask.html
答案 3 :(得分:0)
嗯。如果我理解正确,你不想在图像下载完成之前使用新的适配器吗?适配器中的位置是您的图像下载代码。根据这一点,您可能只有在加载/显示适配器的视图后才能访问下载代码。
我通常首先在后台线程中下载图像,然后将它们缓存在一个集合(SoftReferences)中。然后,我在加载时从该集合中读取适配器。
答案 4 :(得分:0)
如前所述,您可以使用在另一个线程中运行的AsyncTask,并且可以在单独的线程下载缩略图后更新UI。根据您希望如何实现它,您还可以使用AsyncTask中的onProgressUpdate()方法更新缩略图。否则使用onPostExecute重置列表适配器。