首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用getSpans方法获取可扩展中的所有跨

使用getSpans方法获取可扩展中的所有跨
EN

Stack Overflow用户
提问于 2019-09-19 09:51:19
回答 2查看 2.2K关注 0票数 0

我使用下面的代码来获得一个可扩展字符串中的所有跨度。

代码语言:javascript
复制
SpannableStringBuilder str = new SpannableStringBuilder(editText.getText());
Object [] objectSpans = str.getSpans(0, str.length(), Object.class);

//loop through all spans
for (Object objSpan: objectSpans) {
   Spanned spanned = (Spanned) objSpan;// Here I encounter a ClassCastException
   start = spanned.getSpanStart(new Object());
   end = spanned.getSpanEnd(new Object());
   ...
}

当我想将ClassCastException转换为跨(第6行)时,我会遇到下面的objSpan。

java.lang.ClassCastException:不能将android.text.style.SpellCheckSpan转换为android.text.Spanned

我该如何解决这个问题?有没有更好的方法让所有的跨度都是一个可扩展的字符串?

EN

回答 2

Stack Overflow用户

发布于 2019-09-19 09:56:22

使用instanceof代替自动进行转换。

代码语言:javascript
复制
for (Object objSpan: objectSpans) {
   if(objSpan instanceof Spanned){
    Spanned spanned = (Spanned) objSpan;// Here I encounter a ClassCastException
    start = spanned.getSpanStart(new Object());
    end = spanned.getSpanEnd(new Object());
    ...
   } 
}

要理解问题所在,您可以阅读这个ClassCastException Documentation,这样您就可以阅读:

抛出

以指示代码试图将对象强制转换为它不是实例的子类。例如,下面的代码生成一个ClassCastException:

因此,如果要执行cast,必须确保该对象与您声明的对象类型相同,否则将得到一个ClassCastException

票数 1
EN

Stack Overflow用户

发布于 2019-09-19 10:07:47

检查objSpan是否是跨范围的实例。似乎@Skizo是这么认为的,因为mine.therefore对重复的回答感到抱歉,但它也解决了我的问题。

代码语言:javascript
复制
SpannableStringBuilder str = new SpannableStringBuilder(editText.getText());
Object [] objectSpans = str.getSpans(0, str.length(), Object.class);

//loop through all spans
for (Object objSpan: objectSpans) {
   if(objSpan instanceof Spanned){
   Spanned spanned = (Spanned) objSpan;// Here I encounter a ClassCastException
   start = spanned.getSpanStart(new Object());
   end = spanned.getSpanEnd(new Object());
   ...
}
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58008311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档