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

Android:如何在ListView中添加HTML链接?,html,android,listview,hyperlink,Html,Android,Listview,Hyperlink,如何在ListView中添加可点击链接?这是使用TextView的“自动链接”属性完成的。我花了一些时间翻阅了文档,因此将其放在这里并举例说明,以防其他人正在查找: 假设您正在将listview绑定到自定义适配器。在这种情况下,以下代码将进入getView调用: 代码: textcontent.setText(Html.fromHtml(item.get_text())); textcontent.setAutoLinkMask(Linkify.WEB_URLS); <TextView

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

这是使用TextView的“自动链接”属性完成的。我花了一些时间翻阅了文档,因此将其放在这里并举例说明,以防其他人正在查找:

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

代码:

textcontent.setText(Html.fromHtml(item.get_text()));
textcontent.setAutoLinkMask(Linkify.WEB_URLS);
<TextView
                android:id="@+id/txtview"
                android:autoLink="web"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:text="put your link here"/>
只要将链接放在传递给setText调用的文本中,就完成了

XML:

textcontent.setText(Html.fromHtml(item.get_text()));
textcontent.setAutoLinkMask(Linkify.WEB_URLS);
<TextView
                android:id="@+id/txtview"
                android:autoLink="web"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:text="put your link here"/>


希望这有助于

如果您的文本已经是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));
TextView textcontent=(TextView)findViewById(…);
setMovementMethod(LinkMovementMethod.getInstance());
字符串文本=”;
textcontent.setText(Html.fromHtml(text));
这将导致在文本视图中可以单击任何链接标记。或者,您可以使用Legend建议的
android:autoLink=“web”
,但这会产生以下副作用:a)链接未包装在锚标记中的URL,以及b)可能缺少URL或链接非URL的内容。如果您想要autoLink的智能,那么您应该使用它,但是如果您只想链接已有的标记,那么最好使用
setMovementMethod()

有关更多详细信息,请参阅此错误报告:


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

我在下面找到了一个简单的解决方法:

解决此问题的一个简单方法是调用 “setDescendantFocusability(焦点\块\子体);” 在添加listView视图时在其上显示。 您可以选择行,单击行,然后单击子复选框和按钮

虽然需要一些铸造,但对我来说效果非常好:

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

您需要设置函数setOnItemClickListener(),并在其中声明如下内容:

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

listview的棘手之处在于,其中没有任何内容(例如按钮的文本视图)是可点击的

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

  • 用户在列表视图上看到的名称
  • 你想要引导他们去的超链接 在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>
    
    
    谷歌
    雅虎
    宾
    百度
    https://www.google.com
    https://www.yahoo.com
    https://www.bing.com
    https://www.baidu.com
    
    在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);
            }
        }
    
    }
    
    公共类SearchProvider实现AdapterView.OnItemClickListener{
    私有ListView lv_搜索;
    私有字符串[]名称=getResources().getStringArray(R.array.search\u provider\u name\u array);
    私有字符串[]links=getResources().getStringArray(R.array.search\u provider\u link\u array);
    //..
    @凌驾
    创建视图的公共视图(视图v、字符串名称、上下文上下文、属性集属性){
    lv_search=(ListView)v.findViewById(R.id.lv_search);
    ArrayAdapter sAdapter=新的ArrayAdapter(getActivity(),android.R.layout.simple_list_item_1,name);
    lv_搜索设置适配器(sAdapter);
    lv_search.setonicmclicklistener(本);
    返回v;
    }
    @凌驾
    公共无效onItemClick(AdapterView AdapterView、View视图、int i、long l){
    
    如果(这实际上对我不起作用-在ListView中的项目中,单个链接仍然不可链接,但是emmby的解决方案非常有效。非常感谢,我的ListView.Hmm帮助了我,似乎添加了textcontent.setMovementMethod(LinkMovementMethod.getInstance());使对textview文本部分的单击不再传递到下面的listview。这是对所问问题的最正确答案。BeerMe的答案修复了listview项目变得不可访问的问题。您在哪里添加DesendantFocusability?到listview还是到ListItem?我遵循了您的示例e添加可点击链接,但是当点击我的textview的非链接部分时,事件不会传递给listitem的父视图或listview…我这样使用它:public view getView(int position,view convertView,ViewGroup parent){view v=convertView;if(v==null){LayoutInflater vi=(LayoutInflater)context.getSystemService(context.LAYOUT\u INFLATER\u SERVICE);v=vi.inflate(itemLayout,null);}…((ViewGroup)v.SetDegenantFocusability(ViewGroup.FOCUS\u BLOCK\u Subgenders);return v;}如果单击非链接部分,我还没有检查事件会发生什么。(不确定为什么我无法将代码格式化…抱歉。)