In un TextView, voglio fare un brindisi quando viene cliccato un collegamento ipertestuale, invece di aprire l'url corrispondente in un browser. Io uso il seguente codice, ma il problema qui è il metodo onClick() sembra mai essere chiamato !!:L'onClick() di ClickableSpan non funziona per 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());
qualcuno può dirmi cosa c'è di sbagliato con il mio codice e come risolvere il problema? Grazie.
Stavo scrivendo la soluzione finché non ho visto la tua risposta. Ho iniziato ieri la lotta contro questo problema. Il tuo codice dà l'ultimo indizio sul mio problema. – raultm
Bello. Funziona con removeSpan. Questa soluzione è ciò che stavo cercando. Grazie –