如何使用字符串作为资源 ID

How to use a String as a resource ID

*更新 - 已解决** 我一直在寻找的是如何获取资源 ID。当你不知道你不知道什么时,很难提出一个问题,但在几分钟内回答问题的两个人似乎明白了。谢谢大家。

这是我最终能够使用的代码,而无需加载所有 32 个位图,同时使用字符串来确定我要查找的是哪个位图。

StartCalc session = new StartCalc(context);
    int findDate = session.findDate(); 
    for (int i = 0; i < daysTil.length; i++) {
        String numbers = "numbers" + i;
        int resId = getResources().getIdentifier(numbers, "drawable", getPackageName());

        if (i == findDate) {
            ivNumbers.setImageBitmap(BitmapFactory.decodeResource(getResources(), resId));
        }
    }

*原问题** 我正在尝试使用 for 循环来填充从 0 到 32 的位图数组,但我不知道如何使用字符串 "numbers"(在第 3 行标识)来填充所需的地址BitmapFactory(在第 5 行引用)。这是我用 两种 方式填充数组的代码。漫长的道路有占用太多内存的问题,而且由于我只需要这些图像中的一个基于日期,我希望有办法做到这一点。

private void setNumbers() {
    for (int i = 0; i < 33; i++) {
        String numbers = "R.drawable.numbers" + i;
        Log.e(TAG, numbers);
        daysTil[i] = BitmapFactory.decodeResource(getResources(), numbers);
    }

    daysTil[0] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers0);
    daysTil[1] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers1);
    daysTil[2] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers2);
    daysTil[3] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers3);
    daysTil[4] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers4);
    daysTil[5] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers5);
    daysTil[6] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers6);
    daysTil[7] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers7);
    daysTil[8] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers8);
    daysTil[9] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers9);
    daysTil[10] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers10);
    daysTil[11] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers11);
    daysTil[12] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers12);
    daysTil[13] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers13);
    daysTil[14] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers14);
    daysTil[15] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers15);
    daysTil[16] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers16);
    daysTil[17] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers17);
    daysTil[18] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers18);
    daysTil[19] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers19);
    daysTil[20] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers20);
    daysTil[21] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers21);
    daysTil[22] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers22);
    daysTil[23] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers23);
    daysTil[24] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers24);
    daysTil[25] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers25);
    daysTil[26] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers26);
    daysTil[27] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers27);
    daysTil[28] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers28);
    daysTil[29] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers29);
    daysTil[30] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers30);
    daysTil[31] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers31);
    daysTil[32] = BitmapFactory.decodeResource(getResources(), R.drawable.numbers32);
}

资源class有这个方法:

public int getIdentifier (String name, String defType, String defPackage) 

所以完整的语句可能看起来像这样:

for (int i = 0; i < 33; i++) {
    String numbers = "R.drawable.numbers" + i;
    Log.e(TAG, numbers);
    Resources resources = <context>.getResources();
    daysTil[i] = BitmapFactory.decodeResource(getResources(), 
                    resources.getIdentifier ("numbers" +i, "drawable",
                                                  <context>.getPackageName());
}

(注意:此代码未经测试 - 仅用于演示)

您应该使用此方法来查找可绘制对象的资源 ID:

String numbers = "numbers" + i;

int resId = getResources().getIdentifier(numbers, "drawable", getPackageName());

参考:getIdentifier