带有可点击链接的Android TextView:如何在CustomAdapter ListView中捕获点击次数?

时间:2016-03-30 14:07:24

标签: android listview hyperlink textview android-adapter

我在while True: choice = random.choice(list_of_strings) if len(choice) > x: return choice 中有TextView,可以有2个以上的链接。我已经访问了此SO link以捕获listview的事件,但这不适用于列表视图。

这是我的代码:

TextView方法

getView

使文字可点击的方法

if(ann.message.contains("<a href=")){
   setTextViewHTML(holder.announcement, ann.message);
}

这是我的protected void makeLinkClickable(SpannableStringBuilder strBuilder, final URLSpan span) { int start = strBuilder.getSpanStart(span); int end = strBuilder.getSpanEnd(span); int flags = strBuilder.getSpanFlags(span); ClickableSpan clickable = new ClickableSpan() { public void onClick(View view) { // Do something with span.getURL() to handle the link click... Log.i("YES-5.0", span.getURL()); } }; strBuilder.setSpan(clickable, start, end, flags); strBuilder.removeSpan(span); } protected void setTextViewHTML(TextView text, String html) { CharSequence sequence = Html.fromHtml(html); SpannableStringBuilder strBuilder = new SpannableStringBuilder(sequence); URLSpan[] urls = strBuilder.getSpans(0, sequence.length(), URLSpan.class); for(URLSpan span : urls) { makeLinkClickable(strBuilder, span); } text.setText(strBuilder); }

TextView

我尝试过使用“TextView”的以下属性的所有组合,但仍然没有成功:

<TextView
        android:id="@+id/textViewAnnouncementMessage"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="4dp"
        android:focusable="false"
        android:textColor="@android:color/black"
        android:maxLines="5"
        android:text="@string/message"
        android:textSize="16sp"/>

3 个答案:

答案 0 :(得分:0)

如果您为textview使用XML布局,并且您的可点击链接全部以http:// il devrait etre suffisant d&#39; utiliser les attributs suivants开头:

        <TextView
            ...      
            android:autoLink="all"
            android:linksClickable="true"
            android:textColorLink="@color/colorAccent" />

autoLink all意味着所有mailAdress,http链接和电话号码都是可点击的。请查看官方文档以获取更多详细信息:http://developer.android.com/reference/android/text/util/Linkify.html#ALL

答案 1 :(得分:0)

您是否在TextView上设置了移动方法?此外,如果您的链接是一个href标记,则可以使用Html.fromHtml为您构建Spannable。例如:

TextView mView = (TextView) findViewById(R.id.text1);
mView.setMovementMethod(LinkMovementMethod.getInstance());
mView.setText(Html.fromHtml(YOUR_LINK_STRING));

答案 2 :(得分:0)

我在调用setTextViewHTML()之前添加以下行解决了我的问题:

holder.announcement.setMovementMethod(LinkMovementMethod.getInstance());

现在我的 getView()方法看起来像是:

if(ann.message.contains("<a href=")){
   holder.announcement.setMovementMethod(LinkMovementMethod.getInstance());
   setTextViewHTML(holder.announcement, ann.message);
}