Я хочу изменить несколько цветов 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)
}
}
}
Для TextView, которые имеют идентификаторы, такие как textView?Price, вы можете использовать метод getIdentifier(), чтобы получить их целочисленные идентификаторы в цикле, а затем применить такие условия, как это (для 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, если их идентификаторы имеют такое сходство, вы можете использовать тот же метод.
Я предполагаю, что у вас есть текстовые представления, такие как textView1Price, textView2Price, ... если последний идентификатор - textView1000Price, вам просто нужно изменить диапазон на (1..1000). Если идентификаторы не имеют такого сходства, этот код работать не будет.
Я думаю, что справлюсь с этой работой. Мне просто нужно комментировать все записи, чтобы я мог отслеживать значения. пример NewYorkPrice =. будет изменен на textView1Price с комментарием выше о Нью-Йорке. Спасибо за вашу помощь, я это ценю.
В качестве примечания я обычно использую with(tv) { when { text.startsWith() -> ... } } для Kotlin.
Спасибо за комментарий. Я новичок в этом. Не могли бы вы уточнить немного подробнее? Для (1..9) .forEach что делать, если у меня нет определенной суммы? Пример textView # Price предназначен для удобства. В идентификаторах каждого из них общим фактором является только цена. Простите за неудобства.