懒惰加载ListView(不是那种懒惰)

时间:2014-05-04 19:40:29

标签: android listview lazy-loading ui-thread

在将我的问题标记为重复之前,我并未谈论将图像延迟加载到ListView中。我想要做的是懒洋洋地加载(孩子)视图。让我解释一下......

我有一个ListView,我想用TextViews填充。 TextViews使用ImageSpans显示文本。如果我输入包含许多ImageSpans的文本,渲染它需要花费很多时间,这会极大地降低ListView的滚动性能。

要解决这个问题,我想显示一个加载微调器,直到TextView就像我们为ImageView做的那样。问题是ImageView显示静态图像,TextView需要呈现其内容。我想在Bitmap上绘制TextView而不是显示位图,但我无法控制TextView的文本,我担心它最终可能超过最大位图大小。我提出的所有其他方法都涉及从非ui线程调用View的draw(Canvas)方法,该线程在android中受到限制。所以我的问题是如何懒惰地渲染ListView的视图?这甚至可能吗?

1 个答案:

答案 0 :(得分:1)

我认为这是可行的。

  1. 内部适配器getView()方法创建带进度指示器的视图。
  2. 将工作线程与该视图相关联,该视图将对位图进行大量绘制(AsyncTask)。
  3. AsyncTask完成绘制后,您可以更新ImageView中的AsyncTask.onPostExecute(),这是在UI线程中调用的。
  4. 查看本教程。这是一个类似的问题。 http://developer.android.com/training/displaying-bitmaps/process-bitmap.html

    您可以创建自己的View类来封装此异步加载。 Pelase要知道ListView回收View屏幕外的实例,这会增加一些复杂性。