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

如何通过Intent动态获取XML中指定名称的String数组?

问题

希望通过Intent传递的字符串额外数据,动态确定使用XML文件中的哪个String数组。

当前Java代码:

Intent myIntent = getIntent();
String stringID = myIntent.getStringExtra("stringID");//pull string id

String[] allStrings = getResources().getStringArray(stringID);

XML代码:

<string-array name="set1">
    <item>item1</item>
    <item>item2</item>
    <item>item3</item>
</string-array>

上述Java代码最后一行无法运行,因为getStringArray()需要传入类似R.array.set1的资源ID而非字符串名称,请问如何实现动态选择?是否使用字符串数组的ID会更简便?

解决方案

方法1:通过字符串名称转换为资源ID

可以使用getResources().getIdentifier()方法将字符串形式的数组名称转换为对应的资源ID,再传入getStringArray():

Intent myIntent = getIntent();
String stringArrayName = myIntent.getStringExtra("stringID");

// 根据名称获取string-array的资源ID
int arrayResId = getResources().getIdentifier(stringArrayName, "array", getPackageName());
if (arrayResId != 0) { // 检查是否找到有效资源
    String[] allStrings = getResources().getStringArray(arrayResId);
    // 执行后续业务逻辑
} else {
    // 处理未找到对应数组的异常情况
}

注意:getIdentifier()返回0代表未找到匹配的资源,必须添加判空逻辑,防止触发崩溃。

方法2:直接传递资源ID(更简便高效)

如果场景允许,直接传递资源ID是更优的选择,省去字符串转ID的步骤,同时避免拼写错误风险:
发送Intent时:

Intent intent = new Intent(this, TargetActivity.class);
intent.putExtra("arrayResId", R.array.set1);
startActivity(intent);

接收Intent时:

Intent myIntent = getIntent();
int arrayResId = myIntent.getIntExtra("arrayResId", 0);
if (arrayResId != 0) {
    String[] allStrings = getResources().getStringArray(arrayResId);
    // 执行后续业务逻辑
}

两种方式对比

直接传递资源ID的方式更推荐:

  • 无需额外的资源查找操作,性能更优
  • 避免因字符串拼写错误导致的资源找不到问题
  • 代码逻辑更简洁直观,可读性更强

只有当必须通过字符串名称动态获取(比如从外部配置、服务器返回等场景)时,才使用方法1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 03:35:24