Android 获取字符串名称的资源 "dynamicaly"

Android resources getting string names "dynamicaly"

我有 2 个活动,一个带有带有 ID 的按钮。根据您单击的按钮,ID 会通过其意图传递给第二个 activity。然后我在那一秒 activity 想要根据该按钮的 ID 检索字符串值。我将我的字符串值命名如下:

<resources>
    <string name="app_name">DataApp</string>
    <string name="info_title_zalm">Zalm</string>
    <string name="info_weight_zalm">1kg</string>
    <string name="info_origin_zalm">Atlantische Oceaan</string>
    <string name="info_title_haai">Haai</string>
    <string name="info_weight_haai">200kg</string>
    <string name="info_origin_haai">Atlantische Oceaan, zoet water uitzonderingen</string>
</resources>

因此字符串有一个共享的名称开头,例如 info_title_zalm 和 info_title_haai。当单击 haai 按钮时,一个 "haai" 字符串被传递到第二个 activity,我计划在其中执行诸如 "info_title_" + string 之类的操作以获取相应的字符串。但是因为需要将其检索为 R.string.info_title_haai 这不起作用。

这种事情在Android有可能吗?

使用 Android Studio,构建 Jellybean 及更高版本。

我用这个:

int resId = getResources().getIdentifier("info_title_" + string, "string", getPackageName());
String s = getString(resId);

Here 你有更多信息

您可以像这样使用某种包装方法(未经测试):

private String getStringResourceByName(String myResourceName) {
    String packageName = getPackageName();
    int resId = getResources()
            .getIdentifier(myResourceName, "string", packageName);
    if (resId == 0) {
        return myResourceName;
    } else {
        return getString(resId);
    }
}

这将根据与 myResourceName 的匹配获得值 - 然后你可以传入任何你喜欢的东西。

如果你只有两个选项,你可以通过 intent 传递你需要的所有资源的 ID。

如果这个 table 会变大,我认为您最好在应用程序中打包一个小型数据库。