Android 惰性加载ListView(不是那种惰性)

Android 惰性加载ListView(不是那种惰性),android,listview,lazy-loading,ui-thread,Android,Listview,Lazy Loading,Ui Thread,在您将我的问题标记为重复之前,我并不是说在ListView中延迟加载图像。我想做的是懒洋洋地加载(子)视图。让我解释一下 我有一个列表视图,我想用文本视图填充它。文本视图显示带有图像跨度的文本。如果我输入了一个包含很多ImageSpans的文本,渲染它需要花费很多时间,这会严重降低ListView的滚动性能 为了解决这个问题,我想显示一个加载微调器,直到TextView就绪,就像我们为ImageView所做的那样。问题是ImageView显示静态图像,TextView需要呈现其内容。我考虑在位图

在您将我的问题标记为重复之前,我并不是说在ListView中延迟加载图像。我想做的是懒洋洋地加载(子)视图。让我解释一下

我有一个列表视图,我想用文本视图填充它。文本视图显示带有图像跨度的文本。如果我输入了一个包含很多ImageSpans的文本,渲染它需要花费很多时间,这会严重降低ListView的滚动性能

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

我认为这是可行的

  • 内部适配器
    getView()
    方法创建带有进度指示器的视图
  • 将工作线程与该视图关联,该视图将对位图进行大量绘制(
    AsyncTask
  • 一旦
    AsyncTask
    完成绘图,您就可以更新
    AsyncTask.onPostExecute()
    中的
    ImageView
    ,该视图在UI线程中调用
  • 查看本教程。这是一个类似的问题。


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

    正如我所说,我考虑过绘制位图而不是显示位图,但如果TextView的宽度或高度超过了最大纹理大小(大多数设备上的最大纹理大小为2048x2048),该怎么办。如果我这样做,我将失去TextView带来的所有好东西,比如可选文本,如果可能的话,我会保留这些文本。