我知道这个问题有很多答案,但我似乎无法让它发挥作用...... 我有一个ListView,其中包含一些自定义项目,包括TextViews和ImageViews。
我通过XML Feed收到一些数据。其中一个元素包含HTML,如:
<![CDATA[ <p>My text <a href="http://myhost.com/link/to/fM" target="_blank">click here</a>.</p> ]]>
在我的适配器中,我有这个方法:
private static Spanned fromHtml(String html){
Spanned result;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
result = Html.fromHtml(html,Html.FROM_HTML_MODE_LEGACY);
} else {
result = Html.fromHtml(html);
}
return result;
}
我在Android 6上,所以我最终进入“其他”部分。
我使用“holder”类来定义ListView项所需的所有TextView和ImageView。持有者实例的分配如下:
view.setTag(myHolder);
和问题的TextView我填充如下:
String s = fromHtml(xmlItem.Description).toString();
myHolder.description.setText(fromHtml(s));
如果我省略
fromHtml(s)
并且只是setText(s)我从我的CDATA呈现的所有标签
我真的只想将文本“点击此处”呈现为可点击链接...
我做错了什么?
答案 0 :(得分:0)
你的问题在于:
String s = fromHtml(xmlItem.Description).toString();
setText()
方法接受任何实现CharSequence
方法的方法。大多数人通常会传递String
个实例,这是String
实现CharSequence
以来完全正常的。但字符串不包含处理链接所需的信息,因此您应该将该行更改为:
Spanned s = fromHtml(xmlItem.Description);
Spanned
也实现了CharSequence
界面,因此您可以像以前一样将s
传递给setText()
。现在您将看到一个突出显示的链接。
TextView
知道如何处理 fromHtml()
创建的链接范围。您使用setMovementMethod()
调用。您只需要拨打一次(例如,当您的convertView
为空,以便您创建新视图时),但您也应该添加此行:
myHolder.description.setMovementMethod(LinkMovementMethod.getInstance());