gpt4 book ai didi

java - SpannableStringBuilder不会显示Firebase(Kotlin)中每个数据的图像范围

转载 作者:行者123 更新时间:2023-12-02 13:40:37 26 4
gpt4 key购买 nike

我从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)

最佳答案

问题出在myData.setSpan(span, 0, 1, Spanned.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
}

关于java - SpannableStringBuilder不会显示Firebase(Kotlin)中每个数据的图像范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63788533/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com