You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 05:15:08