如何使用变量索引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
相关产品推荐
相关产品推荐

