2012-02-06 14 views
13

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.

Respuesta

18

En realidad mi último descubierto, hay que quitar el URLSpan original antes de añadir nuestras propias luces utilizando setSpan()

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

Gracias Damian.

+0

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

+0

Agradable. Funciona con removeSpan. Esta solución es lo que estaba buscando. Gracias –

Cuestiones relacionadas