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

Android Java中如何通过findViewById()动态获取控件ID

动态按命名规则遍历获取XML中TextView控件的实现方法

完全可以实现该需求。你直接拼接ID字符串调用findViewById()失效的核心原因是:findViewById()接收的入参是编译期生成的整型资源ID,并非字符串类型的控件ID名,直接传入拼接的字符串无法匹配到XML中定义的控件。

具体实现逻辑如下:

  • 借助Resources类提供的getIdentifier()方法,通过拼接的字符串ID名反向查找对应的整型资源ID
  • 用for循环遍历0-15的序号,批量拿到所有slot开头的控件ID
  • 对返回的资源ID做合法性校验后,再调用findViewById()获取控件实例,避免空指针

对应Java实现代码:

List<TextView> slotTextViews = new ArrayList<>();
// 遍历slot0到slot15
for (int index = 0; index < 16; index++) {
    // 拼接和XML中命名一致的ID字符串
    String targetIdName = "slot" + index;
    // 匹配对应整型资源ID:参数依次为 资源名、资源类型、当前应用包名
    int viewId = getResources().getIdentifier(targetIdName, "id", getPackageName());
    // 资源ID为0代表未找到对应控件,跳过避免崩溃
    if (viewId != 0) {
        TextView currentSlot = findViewById(viewId);
        slotTextViews.add(currentSlot);
    }
}

注意事项:如果在Fragment中使用该逻辑,需要通过requireContext()获取上下文实例来调用getResources()和getPackageName(),不要直接使用脱离宿主生命周期的方法调用。

内容的提问来源于stack exchange,提问作者Jeronimo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 21:45:44