Html.fromHtml() 在 ListView 回收问题中使用自定义 ImageGetter

Html.fromHtml() with custom ImageGetter inside ListView recycle issues

我必须在 ListView 中展示一些 HTML 来自互联网的图片。图像在自定义 Html.ImageGetter 中处理。问题是,我需要可用的 TextView 来将图像下载到里面。这导致必须将 HTML 解析合并到 ArrayAdaptergetView 方法中。但是 Android 系统在回收和重绘元素时经常调用该方法。

我怎样才能阻止这种回收的发生?我假设我必须使用不同的流程。这是我当前的 getView() 方法:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    TextView view = new TextView(context);
    CharSequence element = getItem(position);
    CharSequence html = Html.fromHtml(element.toString(), new MessageImageGetter(context, view), null);
    view.setText(html);

    view.setPadding(12, 4, 12, 4);

    return view;
}

也许在不使用 ListViewArrayAdapter 的情况下,类似列表的行为是可能的,不会经常回收和重绘。

How can I stop this recycling from happening?

你不知道。您创建了一个更丰富的模型对象。而不是看起来像 ListAdapter<String> 的东西,而是 ListAdapter<Thing>,其中:

  • Thing 保存您现有的字符串值 (element)
  • Thing 缓存 Html.fromHtml() 结果
  • 您的 getView()Thing 获取 html CharSequence,因此可以利用缓存

当然可以随意替换比 Thing 更适用的名词...:-)