如何连接声明和If语句?

时间:2019-01-01 18:59:03

标签: android if-statement kotlin textview declaration

我想通过一对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)
            }
        }
    }

1 个答案:

答案 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)
    }
}

对于resourcespackageName,您可能需要提供有效的Context,例如:

val id = context.resources.getIdentifier("textView${it}Price", "id", context.packageName)

如果您的代码不在活动中。
对于其他TextView,如果它们的ID具有相似性,则可以使用相同的方法。