Android Studio如何动态调用TextView id?动态变量名生成相关问题
Android动态获取同名规则资源id的解决方案
问题根源
你拼接得到的是字符串类型的id名称,而Android的资源id是编译时生成的int类型常量,二者不能直接等同,因此系统会识别为你尝试调用未定义的id_name资源,触发报错。
推荐解决方案(性能更稳定)
提前把所有TextView的id按顺序存入int数组,使用时直接通过counter索引取值,无需运行时查询资源:
// 在MainActivity成员变量位置提前定义id数组 private int[] selectedTvIds = new int[]{ R.id.selected1, R.id.selected2, R.id.selected3, // 按你的命名规则依次填入所有对应TextView的id }; // 赋值时直接取对应索引的id即可,counter从1开始的话索引要减1 int currentId = selectedTvIds[counter - 1]; TextView targetTv = findViewById(currentId); // 填入从SecondActivity回传的选中值 targetTv.setText(回传的选项名称);
动态查询资源方案(适合id数量不确定的场景)
如果你不想提前维护id数组,可以用系统提供的getIdentifier方法通过资源名称动态查询对应的int id:
int counter = 1; String id_name = "selected" + counter; // 三个参数分别为:资源名称、资源类型、应用包名 int resId = getResources().getIdentifier(id_name, "id", getPackageName()); if (resId != 0) { // 0代表未查询到对应资源,加判空避免崩溃 TextView targetTv = findViewById(resId); targetTv.setText(回传的选项名称); } // counter自增逻辑按你原有业务实现即可
注意事项
getIdentifier为运行时查询资源,性能略低于直接使用R.id常量,少量View场景下可忽略性能差异- 如果在Fragment中使用该方法,需要通过宿主Activity获取资源:
requireActivity().getResources().getIdentifier(...)
内容的提问来源于stack exchange,提问作者Kanha Tomar
相关产品推荐
相关产品推荐

