Подтвердить что ты не робот

Динамическое получение идентификатора ресурса изображения в массиве

есть много изображений в drawable foder, поэтому вместо этого вручную создается массив всех идентификаторов ресурсов изображения, я хочу, чтобы все изображения динамически отображались в массиве. в настоящее время я использую этот код:

for(int i=1;i<=9;i++)
    {
            int imageKey = getResources().getIdentifier("img"+i, "drawable", getPackageName());
            ImageView image = new ImageView(this);  
            image.setId(imgId);
            image.setImageResource(imageKey);    
            image.setScaleType(ImageView.ScaleType.FIT_XY);
            viewFlipper.addView(image, new LayoutParams(LayoutParams.FILL_PARENT,              LayoutParams.FILL_PARENT));
            imgId++;
        }

но в этом коде мне нужно вручную изменить имя изображения, чтобы получить идентификатор ресурса, но я хочу получить все изображения с любым именем.

4b9b3361

Ответ 1

вы можете использовать Reflection для достижения этого.

импортируйте класс Field

import java.lang.reflect.Field;

а затем напишите это в своем коде

Field[] ID_Fields = R.drawable.class.getFields();
int[] resArray = new int[ID_Fields.length];
for(int i = 0; i < ID_Fields.length; i++) {
    try {
        resArray[i] = ID_Fields[i].getInt(null);
    } catch (IllegalArgumentException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

resArray[] теперь содержит ссылки на все чертежи в вашем приложении.

Ответ 2

Ну, если ваши имена изображений img1, img2 и т.д., вы можете создать переменную типа

String url = "drawable/"+"img"+i;

int imageKey = getResources().getIdentifier(url, "drawable", getPackageName());

вы также можете заменить свой метод getPackageName() своим именем пакета, например "com.android.resource",
Просто общая функция

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