Android ClickableSpan get text onClick()

TrungDQ picture TrungDQ · Nov 3, 2013 · Viewed 14.9k times · Source

I'm working on ClickableSpan in a TextView, and I'm trying to get the clicked span's text. This is my code.

// this is the text we'll be operating on
SpannableString text = new SpannableString("Lorem ipsum dolor sit amet");

// make "dolor" (characters 12 to 17) display a toast message when touched
ClickableSpan clickableSpan = new ClickableSpan() {
    @Override
    public void onClick(View view) {
        // This will get "Lorem ipsum dolor sit amet", but I just want "dolor"
        String text = ((TextView) view).getText().toString(); 
        Toast.makeText(context, text, Toast.LENGTH_LONG).show();
    }
};

text.setSpan(clickableSpan, 12, 17, 0);

As you can see, I set the clickablespan to the TextView from characters 12 to 17, and I want to get these characters in the onClick event.

Is there anyway I can do that? Or at least can I pass the 12, 17 parameter to onClick event?

Thank you!

Answer

pskink picture pskink · Nov 3, 2013

try this:

public class LoremIpsumSpan extends ClickableSpan {
    @Override
    public void onClick(View widget) {
        // TODO add check if widget instanceof TextView
        TextView tv = (TextView) widget;
        // TODO add check if tv.getText() instanceof Spanned
        Spanned s = (Spanned) tv.getText();
        int start = s.getSpanStart(this);
        int end = s.getSpanEnd(this);
        Log.d(TAG, "onClick [" + s.subSequence(start, end) + "]");
    }
}