提问人:Carlitos Elenor 提问时间:8/17/2023 更新时间:8/17/2023 访问量:40
如何在 Kotlin 中使用循环来命名或使用变量?
How do i use loop to name or use variables in Kotlin?
问:
我正在尝试创建一个“像素”布局并管理那里的运动以进行练习,我很想知道一种简单/创造性的方法来命名和使用所有变量,而无需在每个“像素”上执行非常长的相同任务列表,如下所示:
val x1y1: TextView = findViewById(R.id.x1y1)
val x2y1: TextView = findViewById(R.id.x2y1)
val x3y1: TextView = findViewById(R.id.x3y1)
val x4y1: TextView = findViewById(R.id.x4y1)
val x5y1: TextView = findViewById(R.id.x5y1)
val x6y1: TextView = findViewById(R.id.x6y1)
val x7y1: TextView = findViewById(R.id.x7y1)
val x1y2: TextView = findViewById(R.id.x1y2)
val x2y2: TextView = findViewById(R.id.x2y2)
val x3y2: TextView = findViewById(R.id.x3y2)
val x4y2: TextView = findViewById(R.id.x4y2)
val x5y2: TextView = findViewById(R.id.x5y2)
val x6y2: TextView = findViewById(R.id.x6y2)
val x7y2: TextView = findViewById(R.id.x7y2)
val x1y3: TextView = findViewById(R.id.x1y3)
val x2y3: TextView = findViewById(R.id.x2y3)
val x3y3: TextView = findViewById(R.id.x3y3)
val x4y3: TextView = findViewById(R.id.x4y3)
val x5y3: TextView = findViewById(R.id.x5y3)
val x6y3: TextView = findViewById(R.id.x6y3)
val x7y3: TextView = findViewById(R.id.x7y3)
...
我是新来的,在编码方面,所以向社区致以问候,并非常感谢您的提前回复!
我的天才想法是在 for 循环或任何循环中做到这一点,但我还没有设法使用它。
for (i in 1..7){
for (j in 1..10){
val x$iy$j: TextView = findViewById(R.id.x1y1)
}
}
我认为 Kotlin 不允许这种编码,所以如果是这样的话,有没有其他方法可以做到这一点,或者我是否应该这样做? 此外,在 Kotlin-Android 中实现这种“像素”系统的所有其他方式都非常受欢迎。
答:
2赞
Tenfour04
8/17/2023
#1
永远不要创建这样的重复变量(在任何编程语言中)。请改用列表。您必须使用该函数而不是 .getIdentifier
R.id.whatever
在这种情况下,2D 列表(列表列表)似乎是合适的:
val textViews = List(7) { x ->
List(10) { y->
findViewById<TextView>(resources.getIdentifier("id/x$xy$y", null, null))
}
}
然后,如果你想要视图“x3y4”,例如,你可以用它来检索它。列表索引从 0 开始,因此我们从名称中的这些数字中减去 1。textViews[2][3]
然而
您应该退后一步,因为您也不应该在 XML 布局中创建一堆重复的视图,出于同样的原因,您不会在代码中创建一堆重复变量。
您应该以编程方式在 Kotlin 代码中创建这些 TextView,然后将它们添加到您之前在 XML 中作为其父级的任何类型的 ViewGroup 中。您可以查找有关以编程方式创建和添加视图的其他问题。
我还应该提到,Jetpack Compose 正在成为为 Android 创建 UI 的首选方式。它与传统视图系统的工作方式完全不同,但对于这种事情来说更自然。
评论