私は、マークアップトークンのセットのスパンを作成するwikiのようなパーサーで作業しています。動作していますが、トークンイテレータ内で、SpannableStringBuilder
の部分的な結果をSpannableString
に変換する必要が頻繁にあります。これはかなり頻繁に呼び出されるので、私はそれを行うための最も効率的な解決策を求めており、余分なオブジェクトを作成することは避けています。
私が使用している現在;
SpannableStringBuilder stuff=complex_routine_that_builds_it();
SpannableString result=SpannableString.valueOf(stuff);
ただし、このvalueOf
呼び出しは、内部的にSpannableString
の種類をゼロから構築し、toString
とループを実行して割り当てられたspans
をコピーします。
SpannableStringBuilder
の名前が示すように、ビルダーからSpannableString
を取得するより速い方法があると思います。それは本当ですか?
SpannableStringBuilder
のように直接使用できる場合は、SpannableString
をTextView
に変換する必要はありません。
SpannableStringBuilder stuff = complex_routine_that_builds_it();
textView.setText(stuff);
質問がすでに示したように、絶対に必要な場合は変換を行うことができます
SpannableStringBuilder stuff = complex_routine_that_builds_it();
SpannableString result = SpannableString.valueOf(stuff);
しかし、なぜその変換を行う必要があるのかを検討する必要がありますか?元のSpannableStringBuilder
を使用するだけです。
SpannableString
vs SpannableStringBuilder
これら2つの違いは、String
とStringBuilder
の違いに似ています。 String
は不変ですが、StringBuilder
のテキストを変更できます。
同様に、SpannableString
のテキストは不変ですが、SpannableStringBuilder
のテキストは変更可能です。ただし、これはテキストにのみ適用されることに注意してください。両方のスパン(SpannableString
でも)を変更できます。
関連