Android:如何在ListView中添加HTML链接?

时间:2009-11-08 20:58:09

标签: html android listview hyperlink

我如何在ListView中添加可点击链接?

5 个答案:

答案 0 :(得分:23)

这是使用TextView的autoLink属性完成的。花了我一些时间来挖掘文档,所以把它放在这里,以防万一其他人正在寻找它:

我们假设您将listview绑定到自定义适配器。在这种情况下,以下代码将进入getView调用:

<强>代码:

textcontent.setText(Html.fromHtml(item.get_text()));
textcontent.setAutoLinkMask(Linkify.WEB_URLS);

只需将链接放在要传递给setText调用的文本中,就可以了。

<强> XML:

<TextView
                android:id="@+id/txtview"
                android:autoLink="web"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:text="put your link here"/>

希望有帮助...

答案 1 :(得分:18)

如果您的文字已经是HTML格式,那么最好的办法是:

TextView textcontent = (TextView) findViewById(...);
textcontent.setMovementMethod(LinkMovementMethod.getInstance());

String text = "<a href="http://www.stackoverflow.com">stackoverflow.com</a>";
textcontent.setText(Html.fromHtml(text));

这将导致在文本视图中可以点击任何链接标记。或者,您可以使用Legend建议的android:autoLink="web",但这会产生以下副作用:a)链接未包含在锚标记中的网址,以及b)可能缺少网址或链接不是网址的内容。如果您想要自动链接的智能,那么您应该使用它,但如果您只想链接已经存在的标记,那么最好使用setMovementMethod()

有关详细信息,请参阅此错误报告: http://code.google.com/p/android/issues/detail?id=2219

答案 2 :(得分:11)

  嗯,似乎添加了textcontent.setMovementMethod(LinkMovementMethod.getInstance());这使得textview文本部分的点击不再传递到下面的列表视图。

我在Issue 3414, Comment 27下找到了一个简单的解决方法:

  

解决此问题的简单方法是致电   “setDescendantFocusability(FOCUS_BLOCK_DESCENDANTS);”   在listView视图中添加它们。   您将能够选择行,单击行并单击子复选框和按钮。

虽然需要一些演员,但它对我来说非常合适:

View v;
((ViewGroup)v).setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);

答案 3 :(得分:1)

你需要设置一个函数setOnItemClickListener(),并在其中声明如下:

Uri uri = Uri.parse( "http://www.google.com" );
startActivity( new Intent( Intent.ACTION_VIEW, uri ) );

答案 4 :(得分:0)

listview中棘手的部分(例如Button的TextView)是可点击的!

基本上你需要两个字符串数组:

  1. 用户在list_view上看到的名称;
  2. 您要引导他们前往的超链接。
  3. 在array.xml中:

    <string-array name="search_provider_name_array">
        <item>Google</item>
        <item>Yahoo</item>
        <item>Bing</item>
        <item>Baidu</item>
    </string-array>
    <string-array name="search_provider_link_array">
        <item>https://www.google.com</item>
        <item>https://www.yahoo.com</item>
        <item>https://www.bing.com</item>
        <item>https://www.baidu.com</item>
    </string-array>
    

    在layout_search_provider.xml中,它包含一个列表视图:

    <ListView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/lv_search"
        android:dividerHeight="1dp"/>
    

    在您的活动中:

    public class SearchProvider implements  AdapterView.OnItemClickListener {
        private ListView lv_search;
        private String[] names = getResources().getStringArray(R.array.search_provider_name_array);
        private String[] links = getResources().getStringArray(R.array.search_provider_link_array);
    
        //..
    
        @Override
        public View onCreateView(View v, String name, Context context, AttributeSet attrs) {
            lv_search= (ListView) v.findViewById(R.id.lv_search);
    
            ArrayAdapter sAdapter = new ArrayAdapter(getActivity(), android.R.layout.simple_list_item_1, names);
            lv_search.setAdapter(sAdapter);
            lv_search.setOnItemClickListener(this);
    
            return v;
        }
    
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
            if(i<links.length){
                Uri uri = Uri.parse(links[i]); 
                Intent intent = new Intent(Intent.ACTION_VIEW, uri);
                startActivity(intent);
            }
        }
    
    }
    

    当您的列表是动态列表时,您可以使用以下方法更新列表视图。

    • 将onCreateView()中的代码移动到onResume()。
    • sAdapter.notifyDataSetChanged();