如何通过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
相关产品推荐
相关产品推荐

