URLSpanではClickClickSpanのonClick()が機能していませんか?

TextViewでは、ブラウザで対応するURLを開くのではなく、ハイパーリンクがクリックされたときにトーストをポップアップします。次のコードを使用しますが、onClick()メソッドは決して呼び出されないようです!!:

String source = "link ";

// 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());

誰かが自分のコードに何が間違っていて、それを修正する方法を教えてもらえますか?ありがとう。

15

1 答え

実際に私のシニアは、setSpan()を使用して独自のスパンを追加する前に元のURLSpanを削除する必要があることを理解しました。

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

Damianに感謝します。

22
追加された
ニース。これはremoveSpanで動作します。このソリューションは、私が探していたものです。ありがとう
追加された 著者 Vito Valov,
私はあなたの反応を見るまで解決策を書いていました。私は昨日この問題との戦いを始めました。あなたのコードは私の問題についての最後の手掛かりを与えます。
追加された 著者 raultm,