(Android)如何设置ListView内的textview的超链接?

时间:2016-04-17 00:56:02

标签: android listview

我有一个包含一些新闻的列表视图。每条新闻都是一行,包含标题,内容,出版商和日期。现在我想设置每个标题TextView的超链接。如何实现?以下是我的代码:

private void show_news() {
    ArrayList<Map<String, Object>> list = new ArrayList<>();
    get_data(list);
    ListView lv = (ListView) findViewById(R.id.News_List);
    SimpleAdapter adp = new SimpleAdapter(getApplicationContext(), list, R.layout.news_item, new String[]{"news_title", "news_content", "news_publisher", "news_date"}, new int[]{R.id.news_title, R.id.news_content, R.id.news_publisher, R.id.news_date});
    lv.setAdapter(adp);
    /* the code above runs properly*/
    /*Now I want to set hyperlink to my title TextView..*/

}

这是我的news_item.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<TextView
    android:id="@+id/news_title"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginBottom="5dp"
    android:layout_marginTop="5dp"
    android:textColor="#000000"
    android:textSize="25sp" />

<TextView
    android:id="@+id/news_content"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginBottom="5dp"
    android:textSize="18sp" />

<TextView
    android:id="@+id/news_publisher"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginBottom="5dp"
    android:textSize="12sp" />

<TextView
    android:id="@+id/news_date"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="12sp" />
</LinearLayout>

我是Android编程新手。谁能帮我这个?非常感谢!

2 个答案:

答案 0 :(得分:0)

LinearLayout first = (LinearLayout) adp.getView(0, null, lv);
TextView title = (TextView)first.getChildAt(0);

这并不一定得到列表视图的第一个元素。它甚至不一定能在屏幕上获得第一个元素。这是非常具体的实现(您假设列表视图除了行之外没有其他子项,在许多情况下这实际上是错误的。)

如果要更改列表视图的第一项,请执行

Item item = adb.getItem(0)
item.title= "New Title"
adp.notifyDataSetChanged();

答案 1 :(得分:0)

您可以扩展SimpleAdapter并使用派生适配器。扩展适配器时,通过调用:

设置标题的超链接属性
<the title textview>.setAutoLinkMask(Linkify.WEB_URLS);

在适配器的方法getView方法中。 Android ListView适配器中常用的方法是使用所谓的视图持有者,这是获得更好的列表视图性能的关键技术,您可以从开发人员文档中查看详细信息:Hold View Objects in a View Holder

假设您采用这种方法,代码看起来或多或少像:

 holder.titleView.setAutoLinkMask(Linkify.WEB_URLS);

如果您的textview没有网址,则可以将HTML格式的文字设置为:

holder.titleView.setText(
    Html.fromHtml(
        "<a href=\"http://www.someurl.com\">Breaking News</a> "));
holder.titleView.setMovementMethod(LinkMovementMethod.getInstance());