2016-03-30 400 views
0

我有一個TextViewlistview它可以有2+鏈接。我已經通過這個SO link來捕獲TextView的事件,但這不適用於列表視圖。帶有可點擊鏈接的Android TextView:如何捕獲CustomAdapter ListView中的點擊?

這裏是我的代碼:

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 
     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"/> 

我試圖與下面的TextView的`屬性的所有組合」,但仍然沒有成功:

android:autoLink="all" 
android:clickable="true" 
android:linksClickable="true" 

回答

0

我解決我的問題,加入以下行調用setTextViewHTML()前:

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

所以現在我getView()方法樣子:

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

如果使用XML佈局你的TextView並且您可點擊的鏈接都開始HTTP:// IL devrait ETRE suffisant D'utiliser萊attributs suivants:

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

自動鏈接都意味着所有有電子郵件地址,HTTP鏈接和電話號碼將可以點擊。請看官方文檔以獲取更多詳細信息:http://developer.android.com/reference/android/text/util/Linkify.html#ALL

+0

試圖用你的解決方案,但厄運。 –

+0

我也想捕獲我的textview中的每一個鏈接 –

+0

這應該工作,如果你的鏈接是在http格式,也嘗試設置android:focusable =「false」 – gbaccetta

0

您是否在TextView上設置了移動方法?此外,如果您的鏈接是作爲href標記發佈的,則可以使用Html.fromHtml爲您構建Spannable。例如:

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

是的,但問題是我無法捕捉鏈接點擊'setMovementMethod'。 –

+0

假設您以正確的html格式提供鏈接文本,Html.fromHtml會爲您放置ClickableSpans。 (即在瀏覽器中打開鏈接) – Submersed

+0

實際上,我不想在瀏覽器中打開鏈接我想在Web視圖中打開應用程序內的鏈接。這就是爲什麼我想要捕獲鏈接點擊。 –