在ListView项目的TextView中创建可单击的链接

时间:2017-12-11 18:24:42

标签: android listview

我知道这个问题有很多答案,但我似乎无法让它发挥作用...... 我有一个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呈现的所有标签

我真的只想将文本“点击此处”呈现为可点击链接...

我做错了什么?

1 个答案:

答案 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());