Java SpannableStringBuilder不显示Firebase(Kotlin)中每个数据的图像span

Java SpannableStringBuilder不显示Firebase(Kotlin)中每个数据的图像span,java,android,kotlin,stringbuilder,spannablestring,Java,Android,Kotlin,Stringbuilder,Spannablestring,我从FireBase检索数据,并尝试在每个数据旁边显示一个图像(TextView)。但图像仅显示在第一个数据上 这是输出: val database = FirebaseDatabase.getInstance().reference val getData = object : ValueEventListener { override fun onDataChange(snapshot: DataSnapshot) { val myData = S

我从
FireBase
检索数据,并尝试在每个数据旁边显示一个图像(
TextView
)。但图像仅显示在第一个数据上

这是输出:

val database = FirebaseDatabase.getInstance().reference

val getData = object : ValueEventListener {
     override fun onDataChange(snapshot: DataSnapshot) {
     
          val myData = SpannableStringBuilder()

          for (i in snapshot.children) {
               val data = i.child("myData").value

               myData.append("$data\n\n")
               
               // Get image from drawable and set size
               val drawable: Drawable? = context?.let { ContextCompat.getDrawable(it, R.drawable.myImage) }
               drawable?.setBounds(0, 0, textView.lineHeight, textView.lineHeight)
               
               // Set image span to the first letter
               val span: ImageSpan? = drawable?.let { ImageSpan(it, ImageSpan.ALIGN_BASELINE) }
               myData.setSpan(span, 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
          }

          textView.text = myData
     }

     override fun onCancelled(error: DatabaseError) {

     }
}

database.addValueEventListener(getData)

我希望每个数据都有一个图像

这是我的代码:

val database = FirebaseDatabase.getInstance().reference

val getData = object : ValueEventListener {
     override fun onDataChange(snapshot: DataSnapshot) {
     
          val myData = SpannableStringBuilder()

          for (i in snapshot.children) {
               val data = i.child("myData").value

               myData.append("$data\n\n")
               
               // Get image from drawable and set size
               val drawable: Drawable? = context?.let { ContextCompat.getDrawable(it, R.drawable.myImage) }
               drawable?.setBounds(0, 0, textView.lineHeight, textView.lineHeight)
               
               // Set image span to the first letter
               val span: ImageSpan? = drawable?.let { ImageSpan(it, ImageSpan.ALIGN_BASELINE) }
               myData.setSpan(span, 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
          }

          textView.text = myData
     }

     override fun onCancelled(error: DatabaseError) {

     }
}

database.addValueEventListener(getData)


问题出在
myData.setSpan(span,0,1,span.span_EXCLUSIVE_EXCLUSIVE)
。 始终在整个字符串的第一个位置设置图像范围。这样做:

override fun onDataChange(snapshot: DataSnapshot) {

    val builder = SpannableStringBuilder()

    snapshot.children.forEach { data ->
        builder.append("$data#") // the `#` doesn't mind and will be replaced with the image span

        val span = context?.let {
            ImageSpan(it, R.drawable.myImage, DynamicDrawableSpan.ALIGN_BASELINE)
        }

        builder.setSpan(
            span,
            builder.length - 1,
            builder.length,
            Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
        )

        builder.append("\n\n") // at the end, append new lines
    }
    
    textView.text = builder
}

问题出在
myData.setSpan(span,0,1,span.span_EXCLUSIVE_EXCLUSIVE)
。 始终在整个字符串的第一个位置设置图像范围。这样做:

override fun onDataChange(snapshot: DataSnapshot) {

    val builder = SpannableStringBuilder()

    snapshot.children.forEach { data ->
        builder.append("$data#") // the `#` doesn't mind and will be replaced with the image span

        val span = context?.let {
            ImageSpan(it, R.drawable.myImage, DynamicDrawableSpan.ALIGN_BASELINE)
        }

        builder.setSpan(
            span,
            builder.length - 1,
            builder.length,
            Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
        )

        builder.append("\n\n") // at the end, append new lines
    }
    
    textView.text = builder
}

它起作用了,每个数据都有一个图像。但是我不得不做
myData.length-3,myData.length-2
,我不知道为什么。另一个问题是图片需要替换最后一个字母。我怎么能把它放在最后一个字母旁边@氨基图你的意思是想在每行末尾追加图片?是的,因为我找不到其他方法在每个数据旁边追加图片。我已将其更改为符合你的要求。请试一试,太好了!它工作得很好,符合要求。我在这个网站上的第一个问题得到了非常准确和快速的回答。谢谢它起作用了,每个数据都有一个图像。但是我不得不做
myData.length-3,myData.length-2
,我不知道为什么。另一个问题是图片需要替换最后一个字母。我怎么能把它放在最后一个字母旁边@氨基图你的意思是想在每行末尾追加图片?是的,因为我找不到其他方法在每个数据旁边追加图片。我已将其更改为符合你的要求。请试一试,太好了!它工作得很好,符合要求。我在这个网站上的第一个问题得到了非常准确和快速的回答。谢谢