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 会变大,我认为您最好在应用程序中打包一个小型数据库。
我有 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 会变大,我认为您最好在应用程序中打包一个小型数据库。