当连续调用SpannableStringBuilder.setSpan时,第一个参数Object what不能使用同一个引用,否则只有最后一个设置有效
比如:
SpannableStringBuilder builder=new SpannableStringBuilder(list.get(position));
ForegroundColorSpan redSpan=new ForegroundColorSpan(Color.RED);
builder.setSpan(redSpan, 0,
1, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
builder.setSpan(redSpan,1,
2, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
builder.setSpan(redSpan,2,
3, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
此时,只有最后一个是有效果的,这是因为SpannableStringBuilder内部会保存设置的所有object,每次setspan都会先判断是否已存在该object
解决方法:只需要把setSpan中的redSpan 改为new ForegroundColorSpan(Color.RED)即可:
builder.setSpan(new ForegroundColorSpan(Color.RED), 0,
1, Spannable.SPAN_INCLUSIVE_INCLUSIVE);