Как связать объявления и операторы If? - PullRequest
0 голосов
/ 01 января 2019

Я хочу изменить несколько цветов textView через пару операторов if.Все они имеют разные идентификаторы, за исключением последней части, которая заканчивается на ".... Цена".Я попытался просто вставить оператор 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 рекомендуется, когда заявление закончится, если

(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 голосов
/ 01 января 2019

Для TextViews, которые имеют идентификаторы, такие как textView?Price, вы можете использовать метод getIdentifier(), чтобы получить их целочисленные идентификаторы в цикле, а затем применить следующие условия (для 9 TextViews):

(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)

, если ваш код не находится внутри действия.Для других TextViews, если их идентификаторы имеют такое сходство, вы можете использовать тот же метод.

...