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

如何通过For循环批量将strings.xml中a1-aN字符串存入ArrayList?

解决Android动态循环获取字符串资源的问题

嘿,这个需求我之前也碰到过!要不用逐个写alltoast.add(),而是通过循环动态把strings.xml里的a1到aN资源加入列表,你可以借助Android的Resources.getIdentifier()方法来实现,这是最省心的方案。

核心思路

Android的Resources类提供的getIdentifier()方法,能根据资源名称、资源类型(比如string、drawable)和应用包名,动态获取对应的资源ID。这样你就能在循环里拼接资源名称(比如"a" + i),再用这个ID取出字符串内容,完美替代手动逐个添加的重复代码。

完整代码示例

// 初始化目标ArrayList
ArrayList<String> alltoast = new ArrayList<>();
Context c = ...; // 传入你的上下文对象(比如Activity、Application实例)

// 获取Resources对象和当前应用包名
Resources res = c.getResources();
String packageName = c.getPackageName();

// 循环遍历a1到a50(根据你实际的资源数量调整范围)
for (int i = 1; i <= 50; i++) {
    // 拼接资源名称,比如i=1时就是"a1"
    String resourceName = "a" + i;
    
    // 动态获取资源ID:参数依次为资源名、资源类型、包名
    int resourceId = res.getIdentifier(resourceName, "string", packageName);
    
    // 务必检查资源ID是否有效!找不到对应资源时,getIdentifier会返回0
    if (resourceId != 0) {
        String toastContent = res.getString(resourceId);
        alltoast.add(toastContent);
    } else {
        // 可选:处理资源不存在的情况,比如打日志提醒
        Log.w("ToastLoader", "未找到字符串资源:" + resourceName);
    }
}

关键注意点

  • 循环范围要精准:你的资源是从a1开始的,所以循环变量i要从1启动,而不是0;结束值根据你实际的资源总数调整(比如有50个就写到50)。
  • 必须校验资源ID:如果strings.xml里没有对应的aX资源,getIdentifier()会返回0,直接用0调用getString()会抛出Resources.NotFoundException,所以一定要加if (resourceId != 0)的判断。
  • 包名别硬编码:用c.getPackageName()自动获取当前应用的包名,避免手动写死包名导致的适配错误。

这样就能一次性把所有a1到a50的字符串都加入alltoast列表,不用再重复写几十行add语句啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:42:29