首页 > 解决方案 > 如何使用kotlin在for循环中找到很多视图的ID?

问题描述

我在片段内的一排单选按钮中制作了一个自定义日期选择器,其中包含月份中的日期,每个单选按钮的 ID 就像这样,我想为每个单选按钮 @+id/day_01添加@+id/day_02 一个文本,说明日期名称像WEN 05这样的一周, 所以首先我想在 for 循环中找到每个人的 id,并在循环中更改该视图的文本,但不知道如何在我的片段中执行当前代码的那部分是:

val c = Calendar.getInstance()
        
val year = c.get(Calendar.YEAR)
val month = c.get(Calendar.MONTH)
val currentDay = c.get(Calendar.DAY_OF_MONTH)

val hour = c.get(Calendar.HOUR_OF_DAY)
val minute = c.get(Calendar.MINUTE)
val daysInMonth = c.getActualMaximum(month)

fun getMonth() {
    if (daysInMonth==29) {
        view.day_31.visibility = View.GONE
        view.day_30.visibility = View.GONE
    } else if (daysInMonth==30) {
        view.day_31.visibility = View.GONE
    }
}

getMonth()

for (i in 1 .. daysInMonth) {
    val dayOfMonth = GregorianCalendar(year, month, i)
    val day = dayOfMonth.get(Calendar.DAY_OF_MONTH).toString()
    view.day_"i".text = day
}

我不知道那部分要做什么,view.day_"i".text = day但我想例如当 i=3循环做这样的事情时view.day_03.text = "03"

如果您知道制作自定义日期选择器的更好方法,请告诉我

标签: androidkotlin

解决方案


getIdentifier()按名称获取项目视图的功能。不鼓励使用此方法,因为它使用反射,这会对性能产生负面影响。只有 31 天可以处理,这可能没问题。

for (i in 1 .. daysInMonth) {
    //...
    val dayViewId = resources.getIdentifier("day_$i", "id", packageName)
    view.findViewById<TextView>(dayViewId).text = day
}

如果您在 Fragment 中,请使用requireContext().packageName.

顺便说一句,Calendar 类已经过时,不适合在新项目中使用。请参阅此处以获取解释。


推荐阅读