En un TextView, quiero hacer un brindis cada vez que se hace clic en un hipervínculo, en lugar de abrir la URL correspondiente en un navegador. Yo uso el siguiente código, pero el problema aquí es el método onClick() no parece ser llamado !!:El onClick() de ClickableSpan no funciona para 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());
¿Puede alguien decirme lo que está mal con mi código y cómo solucionarlo? Gracias.
Estaba escribiendo la solución hasta que vi su respuesta. Empecé ayer la lucha contra este problema. Tu código da la última pista sobre mi problema. – raultm
Agradable. Funciona con removeSpan. Esta solución es lo que estaba buscando. Gracias –