Best way to get a SpannableString from a SpannableStringBuilder

android, performance, spannablestring

Solution

There is no need to convert a `SpannableStringBuilder` to a `SpannableString` when you can use it directly, as in a `TextView`:

SpannableStringBuilder stuff = complex_routine_that_builds_it();
textView.setText(stuff);

As the question already showed, you could make the conversion if you absolutely had to by

SpannableStringBuilder stuff = complex_routine_that_builds_it();
SpannableString result = SpannableString.valueOf(stuff);

but you should consider why you would even need to make that conversion? Just use the original `SpannableStringBuilder`.

`SpannableString` vs `SpannableStringBuilder`

The difference between these two is similar to the difference between `String` and `StringBuilder`. A `String` is immutable but you can change the text in a `StringBuilder`.

Similarly, the text in a `SpannableString` is immutable while the text in a `SpannableStringBuilder` is changeable. It is important to note, though, that this only applies to the text. The spans on both of them (even a `SpannableString`) can be changed.

Related

- Android Spanned, SpannedString, Spannable, SpannableString and CharSequence

Problem

I am working in a wiki-like parser that creates spans for a set of markup tokens. It is working, but inside the token iterator I frequently need to convert the partial results on a `SpannableStringBuilder` to a `SpannableString`. This is called pretty frequently, so I'm after the most efficient solution to do it, and avoid creating extra objects. At the moment I'm using; ``` SpannableStringBuilder stuff=complex_routine_that_builds_it(); SpannableString result=SpannableString.valueOf(stuff); ``` However this `valueOf` call internally builds a `SpannableString` kind of from scratch, doing a `toString` and a loop to copy assigned `spans`. As `SpannableStringBuilder` name suggests, I think that maybe there's a quicker way to get the `SpannableString` from the builder. Is it true?

Original source

Related problems