2012-02-06 6 views
13

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.

risposta

18

In realtà il mio anziano capito, abbiamo bisogno di rimuovere l'originale URLSpan prima di aggiungere le nostre campate utilizzando setSpan()

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

Grazie Damiano.

+0

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

+0

Bello. Funziona con removeSpan. Questa soluzione è ciò che stavo cercando. Grazie –

Problemi correlati