SpannableStringBuilder.insert() не вставляет диапазон, если диапазон этого типа уже присутствует в месте назначения
У меня есть 2 SpannableStringBuilders, sbDest и sbSrc.
Я хочу вставить sbSrc в sbDest:
sbDest.insert (0, sbSrc)
Это работает - и sbDest заканчивается промежутками, которые он имел до вставки плюс те, которые присутствуют в sbSrc.
Однако, если sbSrc содержит диапазон типа, который уже присутствует в sbDest, этот диапазон не вставляется.
Кажется, причиной является код под этим комментарием в SpannableStringBuilder.java:
// Добавить span, только если этот объект еще не используется в качестве span в этой строке
Кто-нибудь знает, почему это поведение, и есть ли обходной путь?
Спасибо
1 ответ
Ответил на мой собственный вопрос...
Во-первых, я получал sbSrc из sbDest (для реализации функций копирования / вставки), используя
SpannableStringBuilder ssbSrc = новый SpannableStringBuilder(ssbDest.subSequence(начало, конец));
subSequence () действительно копирует промежутки, но не клонирует их, поэтому ssbSrc заканчивается САМыми промежутками (теми же экземплярами объектов, а не просто теми же типами), что и в ssbDest... и именно поэтому sbDest.insert() не вставляет их.