我有以下功能:
strNameValue = prefs.getString("NamePosition", "");
inNameValueConversion = Integer.parseInt(strNameValue);
if (inNameValueConversion == 0) {
DisplayInformation(inNameValueConversion, R.raw.audio01);
}
if (inNameValueConversion == 1) {
DisplayInformation(inNameValueConversion, R.raw.audio02);
}
if (inNameValueConversion == 2) {
DisplayInformation(inNameValueConversion, R.raw.audio03);
}
if (inNameValueConversion == 3) {
DisplayInformation(inNameValueConversion, R.raw.audio04);
}
因为所有音频文件都以audio
开头,并且最后只有数字更改,我想创建一个允许我使用更少代码的函数:
public void DisplayInformation(int inNum, final int inSoundResource) {
if (inSoundResource < 2) {
strIConv = String.valueOf("0" + inSoundResource);
inConv = Integer.parseInt(strIConv);
int k = R.raw.audio+"inConv";
}
}
我收到以下错误:audio cannot be resolved or is not a field
如何编辑上面的代码,这样我就可以使用一个函数而不是使用那么多的IF语句,因为它会超过90次。
答案 0 :(得分:2)
您可以使用getIdentifier(),因此您的代码如下所示:
public void displayInformation(int inNum) {
String id = "audio";
// for inNum < 9, we need to add 0, so for example when you pass 0
// id will be 01, not 1
if (inNum < 9) then id += "0";
//based on your code, 0 - audio01, 1 - audio02 etc, so add 1
id += (inNum + 1);
// call getIdentifier with string containing resource name, which are in your raw folder
// and in your package
int k = getResources().getIdentifier(id, "raw", "your.package.name.here");
//k now contains an id of your resource, so do whatever you want with it
}
然后您的代码可以简化为:
strNameValue = prefs.getString("NamePosition", "");
inNameValueConversion = Integer.parseInt(strNameValue);
displayInformation(inNameValueConversion);
请记住在调用getIdentifier()时使用您的包名称。
文档在这里:http://developer.android.com/reference/android/content/res/Resources.html#getIdentifier(java.lang.String,java.lang.String,java.lang.String)
答案 1 :(得分:1)
你可以尝试这样做,就像这篇文章中提到的那样:https://stackoverflow.com/a/5626631/3178834
在您的情况下,您必须为资源xml创建一个所有音频文件的数组,然后将其与res.getXml
一起加载到java中。只需按照上面的链接即可。
答案 2 :(得分:1)
以这种方式构建R值将无效 - 您需要使用反射。
例如:
import java.lang.reflect.Field;
/* ... */
int id = R.id.class.getField("video" + i).getInt(0);