我如何在ListView中添加可点击链接?
答案 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)是可点击的!
基本上你需要两个字符串数组:
在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);
}
}
}
当您的列表是动态列表时,您可以使用以下方法更新列表视图。