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

如何使用变量索引Android中R.array下的字符串数组?

在Java中通过字符串动态获取R.array中的资源ID

Java和Lua的动态特性不同,没法直接像R.array[testStr]那样用字符串索引静态类成员,你可以用下面两种方式实现需求:

方法一:使用getResources().getIdentifier(推荐)

这是Android官方提供的动态获取资源ID的方法,简单且安全:

String testStr = "programming_languages";
// 获取对应数组的资源ID,参数依次是资源名、资源类型、应用包名
int arrayId = getResources().getIdentifier(testStr, "array", getPackageName());
if (arrayId != 0) { // 0表示未找到对应资源,必须做判断
    String[] s1 = getResources().getStringArray(arrayId);
    // 拿到数组后执行后续操作
} else {
    // 处理资源不存在的情况,比如打日志或提示用户
}

方法二:使用反射(不推荐)

通过反射直接读取R.array类中的静态字段,这种方式需要处理异常,且性能和稳定性不如第一种:

String testStr = "programming_languages";
try {
    // 获取R.array类中对应名称的字段
    Field field = R.array.class.getField(testStr);
    // 静态字段无需实例,传入null即可获取值
    int arrayId = field.getInt(null);
    String[] s1 = getResources().getStringArray(arrayId);
    // 后续操作
} catch (NoSuchFieldException e) {
    // 找不到对应字段时的处理
    e.printStackTrace();
} catch (IllegalAccessException e) {
    // 字段访问权限异常时的处理
    e.printStackTrace();
}

注意:优先用第一种方法,反射容易因为代码混淆、字段名变更等问题出现异常,维护成本更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 15:50:28