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

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

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

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

码:

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

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

XML:

  

希望有帮助……

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

 TextView textcontent = (TextView) findViewById(...); textcontent.setMovementMethod(LinkMovementMethod.getInstance()); String text = "stackoverflow.com"; textcontent.setText(Html.fromHtml(text)); 

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

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

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

我在第3414期注释27find了一个简单的解决方法:

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

它对我来说很完美,虽然需要一些铸件:

 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中棘手的部分(例如Button的TextView)是可点击的!

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

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

在array.xml中:

  Google Yahoo Bing Baidu   https://www.google.com https://www.yahoo.com https://www.bing.com https://www.baidu.com  

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

  

在您的活动中:

 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 

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

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