android - 懒加载ListView(不是那种懒)

标签 android listview lazy-loading ui-thread

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

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

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

最佳答案

我认为这是可行的。

  1. 内部适配器 getView() 方法创建带有进度指示器的 View 。
  2. 将工作线程与将对位图进行重绘的 View 相关联 (AsyncTask)。
  3. AsyncTask 完成绘制后,您可以在 AsyncTask.onPostExecute() 中更新 ImageView,它在 UI 线程中调用。

查看本教程。这是关于一个类似的问题。 http://developer.android.com/training/displaying-bitmaps/process-bitmap.html

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

关于android - 懒加载ListView(不是那种懒),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23460749/

相关文章:

javascript - 在 slider 中延迟加载图像(纯 JS)

android - 在 Android 上执行周期性任务的最可靠方法

android - 如何获得在 Android 中工作的首选项?

java - Expandable list-view-Android Studio 中的可点击(将您引导至网站)文本

android - Listview 项目上的 Nativescript 切换类

objective-c - 延迟初始化不起作用 iPhone

java - 如何获取调用监听器方法的按钮

android - 如何以编程方式为 com.google.android.material.card.MaterialCardView 设置StrokeColor

android - 如何设置一个空的 ListView 的背景图片?

jsf - 延迟加载 f :selectItems when opening p:selectOneMenu