android - 如何使用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"
如果您知道制作自定义日期选择器的更好方法,请告诉我
解决方案
有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 类已经过时,不适合在新项目中使用。请参阅此处以获取解释。
推荐阅读
- regex - 正则表达式:提取 2 个字符或开头的所有内容
- certificate - 如何在请求中创建没有任何属性/请求扩展的 CSR - Keytool
- bash - 默认标志选项获取操作
- r - 从嵌套循环中提取结果
- angularjs - AngularJS 应用程序在浏览多个视图后速度更快,并且在点击查看时不会冻结
- java - 当活动被销毁然后重新创建时,未调用观察者并且后值无法从后台线程工作
- html - HTML 动画
- tsql - 查找一列包含另一列文本的记录
- java - 函数发送不可解码的文本 Android / Java
- java - Java Maven 项目无法将数据写入 Firebase 实时数据库