Html.fromHtml() 在 ListView 回收问题中使用自定义 ImageGetter
Html.fromHtml() with custom ImageGetter inside ListView recycle issues
我必须在 ListView
中展示一些 HTML 来自互联网的图片。图像在自定义 Html.ImageGetter
中处理。问题是,我需要可用的 TextView
来将图像下载到里面。这导致必须将 HTML 解析合并到 ArrayAdapter
的 getView
方法中。但是 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;
}
也许在不使用 ListView
和 ArrayAdapter
的情况下,类似列表的行为是可能的,不会经常回收和重绘。
How can I stop this recycling from happening?
你不知道。您创建了一个更丰富的模型对象。而不是看起来像 ListAdapter<String>
的东西,而是 ListAdapter<Thing>
,其中:
Thing
保存您现有的字符串值 (element
)
Thing
缓存 Html.fromHtml()
结果
- 您的
getView()
从 Thing
获取 html
CharSequence
,因此可以利用缓存
当然可以随意替换比 Thing
更适用的名词...:-)
我必须在 ListView
中展示一些 HTML 来自互联网的图片。图像在自定义 Html.ImageGetter
中处理。问题是,我需要可用的 TextView
来将图像下载到里面。这导致必须将 HTML 解析合并到 ArrayAdapter
的 getView
方法中。但是 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;
}
也许在不使用 ListView
和 ArrayAdapter
的情况下,类似列表的行为是可能的,不会经常回收和重绘。
How can I stop this recycling from happening?
你不知道。您创建了一个更丰富的模型对象。而不是看起来像 ListAdapter<String>
的东西,而是 ListAdapter<Thing>
,其中:
Thing
保存您现有的字符串值 (element
)Thing
缓存Html.fromHtml()
结果- 您的
getView()
从Thing
获取html
CharSequence
,因此可以利用缓存
当然可以随意替换比 Thing
更适用的名词...:-)