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

Android开发:如何通过Intent传递的value动态访问R.array资源?

解决方案

一、预先定义R.array字符串数组资源

Android的R.array是静态只读资源,无法在运行时动态修改或添加内容,必须先在res/values/arrays.xml中预先定义好需要的字符串数组:

<!-- res/values/arrays.xml -->
<resources>
    <!-- 示例:定义名为"this_extra_text"的数组,存入你的额外文本 -->
    <string-array name="this_extra_text">
        <item>第一条额外文本</item>
        <item>第二条额外文本</item>
        <item>第三条额外文本</item>
    </string-array>

    <!-- 如果需要根据value值对应不同数组,可定义多个数组 -->
    <string-array name="extra_text_0">
        <item>value=0对应的文本</item>
    </string-array>
    <string-array name="extra_text_1">
        <item>value=1对应的文本</item>
    </string-array>
</resources>

二、动态根据value获取对应字符串数组

直接用R.array.value的写法错误,因为R.array的字段是编译时生成的常量,不能直接用变量访问。需要通过getResources().getIdentifier()方法,根据数组名称动态获取资源ID,再读取数组内容:

修改后的Activity代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);

    int value = getIntent().getIntExtra("key", 0);

    // 1. 根据value确定要访问的数组名称(可根据你的实际定义调整规则)
    String targetArrayName;
    if (value == 0) {
        targetArrayName = "this_extra_text"; // 对应你要存入的目标数组
    } else {
        targetArrayName = "extra_text_" + value; // 其他value对应的数组
    }

    // 2. 动态获取数组的资源ID
    int arrayResId = getResources().getIdentifier(targetArrayName, "array", getPackageName());

    // 3. 读取数组内容(需判断资源是否存在,避免崩溃)
    if (arrayResId != 0) {
        String[] loveshayari = getResources().getStringArray(arrayResId);
        RecyclerView recyclerView = findViewById(R.id.recyclerview);
        recyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
        recyclerView.setAdapter(new MyAdapter(loveshayari, getApplicationContext()));
    } else {
        // 资源不存在的处理逻辑,比如显示提示
        Toast.makeText(this, "对应数组资源不存在", Toast.LENGTH_SHORT).show();
    }
}

关键说明

  • getIdentifier()参数:第一个是资源名称,第二个是资源类型(这里填"array"),第三个是应用包名。
  • 若资源不存在,getIdentifier()返回0,必须做判空处理,避免调用getStringArray(0)导致崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 22:01:16