我想通过一对if语句更改多种textView颜色。它们的所有ID都有不同的ID,但它们的最后一部分以“ .... Price”结尾。我尝试过将if语句粘贴到所有这些语句上,但是构建失败。
我做了这样的声明。
textView1Price = ("+10.00")
textView2Price = ("-10.00")
textView3Price = ("0.00")
和类似的if语句。
if (colorID.text.startsWith("-")) {
colorID.setTextColor(Color.RED)
}
if (colorID.text.startsWith("+")) {
colorID.setTextColor(Color.GREEN)
}
if (colorID.text.startsWith("0.00")) {
colorID.text = "_"
colorID.setTextColor(Color.DKGRAY)
我在弄清楚如何将声明连接到If语句时遇到了麻烦。我已经尝试过类似的方法,但部分成功,但是不能列出一个以上的声明。
val colorID = textView1Price
我还试图找到一种方法来引用
text.contains("Price")
但无法执行。任何帮助表示赞赏。感谢您的宝贵时间。
编辑:解决方案跟进
//Declarations
//metal location A price
Price1 = ("+10.00")
//metal location B price
Price2 = ("-10.00")
//metal location C price
Price3 = ("0.00")
Android Studio建议在if语句中声明
(1..912).forEach {
val id = resources.getIdentifier("Price$it", "id", packageName)
val tv = findViewById<TextView>(id)
when {
tv.text.startsWith("-") -> tv.setTextColor(Color.RED)
tv.text.startsWith("+") -> tv.setTextColor(Color.GREEN)
tv.text.startsWith("0.00") -> {
tv.text = "_"
tv.setTextColor(Color.DKGRAY)
}
}
}
答案 0 :(得分:3)
对于ID为textView?Price
的TextView,可以使用getIdentifier()
方法在循环中获取其整数ID,然后应用条件,例如(对于9个TextView):
(1..9).forEach {
val id = resources.getIdentifier("textView${it}Price", "id", packageName)
val tv = findViewById<TextView>(id)
if (tv.text.startsWith("-")) {
tv.setTextColor(Color.RED)
} else if (tv.text.startsWith("+")) {
tv.setTextColor(Color.GREEN)
} else if (tv.text.startsWith("0.00")) {
tv.text = "_"
tv.setTextColor(Color.DKGRAY)
}
}
对于resources
和packageName
,您可能需要提供有效的Context
,例如:
val id = context.resources.getIdentifier("textView${it}Price", "id", context.packageName)
如果您的代码不在活动中。
对于其他TextView,如果它们的ID具有相似性,则可以使用相同的方法。