java– 克隆SpannableStringBuilder

java– 克隆SpannableStringBuilder,第1张

概述我正在使用一个Activity来解析带有标记字符的文本.我正在做的是将它们转换为几种类型的ClickableSpans.问题是我需要实现一个函数(让我们称之为函数B),这意味着有重叠的ClickableSpans并导致一些问题.所以我现在正在做的是在检测重叠跨度的同时创建一个新的SSB,并删除我不需要这个特定功能的SSB.工作正常.但是,我需要能够回到之前的

我正在使用一个Activity来解析带有标记字符的文本.
我正在做的是将它们转换为几种类型的ClickableSpans.

问题是我需要实现一个函数(让我们称之为函数B),这意味着有重叠的ClickableSpans并导致一些问题.

所以我现在正在做的是在检测重叠跨度的同时创建一个新的SSB,并删除我不需要这个特定功能的SSB.工作正常.

但是,我需要能够回到之前的SSB,这似乎不起作用.

一步步:

// I CREATE THE SSBs...static SpannableStringBuilder ssb;static SpannableStringBuilder ssbcopy;// I IMPLEMENT MY CUSTOM FUNCTION THAT PARSES THE TEXT AND SETS THE SBB AS A TEXTVIEW CONTENT...textVIEw.setMovementMethod(new linktouchmovementMethod());ssb = addClickablePart(chapterTextStr,markupCharactersArray);textVIEw.setText(ssb);// WHEN A button IS CliCKED I IMPLEMENT MY FUNCTION B. WHERE I CREATE A copY OF MY ORIGINAL SSB AND STORE IT IN ssbcopy,AND SET IT AS THE TEXTVIEW CONTENT...ssbcopy = SpannableStringBuilder.valueOf(ssb);// I REMOVE THE OVERLAPPing SPANS...overlapSpans = ssbcopy.getSpans(index,index+word.length(),touchableSpan.class);for (int c=0;c

我想这听起来有点令人困惑,我不确定我是否正确解释,但我不能解决这个问题.

编辑:

根据kcoppock的回答,我知道克隆ssb是不可能的,而valueOf(ssb)只是对象的副本.
所以我最终通过循环遍历所有元素并将它们应用到新的ssb来手动克隆我的“ssb”.像这样:

touchableSpan[] spans = ssb.getSpans(0,ssb.length(),touchableSpan.class);ssbcopy = new SpannableStringBuilder(chapterTextStr+"dsadsa");for (int c=0;c

顺便说一句,touchableSpan是我创建的自定义类,它扩展了ClickableSpan最佳答案这里的问题是你使用valueOf().它没有做你认为它做的事情.它所做的就是返回传入的对象,如果它是SpannableStringBuilder;否则,它将给定的CharSequence包装在SpannableStringBuilder中.从来源:

public static SpannableStringBuilder valueOf(CharSequence source) {    if (source instanceof SpannableStringBuilder) {        return (SpannableStringBuilder) source;    } else {        return new SpannableStringBuilder(source);    }}

基本上:

ssb == SpannableStringBuilder.valueOf(ssb);

它们是同一个对象. SpannableStringBuilder没有实现Cloneable,因此除了生成两个副本之外,没有简单的方法来制作副本,例如:

ssb = addClickablePart(chapterTextStr,markupCharactersArray);ssbcopy = addClickablePart(chapterTextStr,markupCharactersArray);
总结

以上是内存溢出为你收集整理的java – 克隆SpannableStringBuilder全部内容,希望文章能够帮你解决java – 克隆SpannableStringBuilder所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1140508.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)