繁体   English   中英

如何将RAW文件夹用于多个音频文件

[英]How to use RAW folder for multiple audio files

我有以下功能:

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次。

您可以使用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)

您可以尝试像这篇文章中提到的那样去做: https : //stackoverflow.com/a/5626631/3178834

在您的情况下,您必须为所有音频文件创建一个数组作为资源xml,然后使用res.getXml将其res.getXml到Java中。 只需点击上面的链接。

以这种方式建立R值将行不通-您需要使用反射。

例如:

import java.lang.reflect.Field;
/* ... */


int id = R.id.class.getField("video" + i).getInt(0);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM