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

Android中能否动态拼接字符串资源名称并获取对应资源?

如何在Android中动态获取对应索引的字符串资源?

当然可以实现你想要的这种动态匹配字符串资源的效果!你原来的写法s = getResources().getString(R.string.("text" + i))没法直接工作,因为R.string下的资源都是编译时生成的静态常量,不能通过字符串拼接直接引用。不过有两种常用的方法可以解决这个问题:

方法一:使用getIdentifier()动态获取资源ID

Android的Resources类提供了getIdentifier()方法,能通过资源名称、类型和应用包名来获取对应的资源ID,之后再用getString()获取字符串。需要注意的是,循环中的i要改成有效final的变量(比如用final int index = i),因为匿名内部类只能访问外部的final或有效final变量。

修改后的代码示例:

String s;
for(int i=0; i<=3; i++){
    final int index = i; // 转为有效final变量
    buttons[index].setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // 动态获取资源ID:资源名是"text"+index,类型是"string",包名可通过getPackageName()获取
            int resId = getResources().getIdentifier("text" + index, "string", getPackageName());
            if (resId != 0) { // 检查资源是否存在,避免找不到资源报错
                s = getResources().getString(resId);
                buttons[index].setText(s);
            } else {
                // 可选:资源不存在时的 fallback 逻辑
                s = "默认文本";
                buttons[index].setText(s);
            }
        }
    });
}

方法二:使用字符串数组(推荐)

这种方法更高效且类型安全,因为getIdentifier()会有一定的性能开销(需要反射查找资源)。我们可以在res/values/strings.xml中定义一个字符串数组:

<string-array name="text_array">
    <item>@string/text0</item>
    <item>@string/text1</item>
    <item>@string/text2</item>
    <item>@string/text3</item>
</string-array>

然后在代码中直接获取数组并按索引取值:

// 先获取字符串数组
String[] textArray = getResources().getStringArray(R.array.text_array);
for(int i=0; i<=3; i++){
    final int index = i;
    buttons[index].setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (index >=0 && index < textArray.length) { // 防止数组越界
                s = textArray[index];
                buttons[index].setText(s);
            }
        }
    });
}

如果你的text0到text3是连续的,这种数组方式是更优的选择,既避免了反射的性能问题,也更符合Android资源管理的规范。

内容的提问来源于stack exchange,提问作者Ana-Maria

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:03:57