Kotlin/Java:如何通过变量名索引循环处理多个变量
批量设置TextView背景色的实现方案
直接通过字符串拼接变量名的方式在Java/Kotlin里是行不通的——编译后变量名会被转换为内存地址,运行时没法通过字符串直接定位到变量。这里给你两种可行的实现方式:
方法一:集合统一管理(推荐)
把所有需要设置的TextView放进集合,再循环遍历处理,这种方式编译时能做类型检查,安全且易维护:
Kotlin 代码
// 将目标TextView存入列表 val targetTextViews = listOf(tv1, tv2, tv3, tv4, tv5, tv6, tv7, tv8, tv9, tv10) // 循环设置背景色 targetTextViews.forEach { it.setBackgroundColor(0xFFFFFFFF) }
Java 代码
import java.util.Arrays; import java.util.List; import android.widget.TextView; // 初始化TextView列表 List<TextView> targetTextViews = Arrays.asList(tv1, tv2, tv3, tv4, tv5, tv6, tv7, tv8, tv9, tv10); // 遍历设置背景色 for (TextView tv : targetTextViews) { tv.setBackgroundColor(0xFFFFFFFF); }
方法二:通过资源ID查找(不推荐)
如果你的TextView是从布局中加载的,可以通过getIdentifier()方法动态获取控件ID,再找到对应TextView设置属性。但这种方式没有编译检查,一旦ID拼写错误或控件不存在,容易出现空指针,仅适合特殊场景:
Kotlin 代码
for (i in 1..10) { // 动态获取控件ID val tvId = resources.getIdentifier("tv$i", "id", packageName) // 查找控件并设置背景色(判空避免崩溃) findViewById<TextView>(tvId)?.setBackgroundColor(0xFFFFFFFF) }
Java 代码
for (int i = 1; i <= 10; i++) { // 动态拼接控件ID字符串并获取资源ID int tvId = getResources().getIdentifier("tv" + i, "id", getPackageName()); TextView tv = findViewById(tvId); // 判空后设置背景色 if (tv != null) { tv.setBackgroundColor(0xFFFFFFFF); } }
内容的提问来源于stack exchange,提问作者DavidDev
相关产品推荐
相关产品推荐

