2012-02-06 18 views
13

TextViewでは、ブラウザで対応するURLを開くのではなく、ハイパーリンクをクリックするたびにトーストをポップアップします。私は、次のコードを使用していますが、ここでの問題は、のonClick()メソッドが呼び出されることはありませんようだ!!です:ClickSpanのonClick()がURLSpanで機能していませんか?

String source = "<a href=\"http://www.google.com\">link</a> "; 

// Get SpannableStringBuilder object from HTML code 
CharSequence sequence = Html.fromHtml(source, imgGetter, null); 
SpannableStringBuilder strBuilder = new SpannableStringBuilder(sequence); 

// Get an array of URLSpan from SpannableStringBuilder object 
URLSpan[] urlSpans = strBuilder.getSpans(0, strBuilder.length(), URLSpan.class); 

// Add onClick listener for each of URLSpan object 
for (final URLSpan span : urlSpans) { 
    int start = strBuilder.getSpanStart(span); 
    int end = strBuilder.getSpanEnd(span); 

    strBuilder.setSpan(new ClickableSpan() 
    { 
    @Override 
    public void onClick(View widget) { 
     Toast toast = Toast.makeText(context, "well done! you click " + span.getURL(), Toast.LENGTH_SHORT); 
     toast.show();   
    }  
    }, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
} 

TextView t4 = (TextView) findViewById(R.id.text4); 
t4.setText(strBuilder); 
// No action if this is not set 
t4.setMovementMethod(LinkMovementMethod.getInstance()); 

誰もが私のコードとどのようにそれを修正すると間違って何を教えてもらえますか?ありがとう。

答えて

18

実は私の先輩が考え出し、我々はsetSpanを使用して私たち自身のスパン()

// The original URLSpan needs to be removed to block the behavior of browser opening 
    strBuilder.removeSpan(span); 

おかげダミアンを追加する前に、元のURLSpanを削除する必要があります。

+0

私はあなたの応答を見るまで解決策を書いていました。私は昨日この問題との戦いを始めました。あなたのコードは私の問題についての最後の手掛かりを与えます。 – raultm

+0

ニース。これはremoveSpanで動作します。このソリューションは、私が探していたものです。ありがとう –

関連する問題