Динамическое получение идентификатора ресурса изображения в массиве
есть много изображений в 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++;
}
но в этом коде мне нужно вручную изменить имя изображения, чтобы получить идентификатор ресурса, но я хочу получить все изображения с любым именем.
Ответы
Ответ 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)