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

