Android Java: R.id.variable1..variable2..variable3..etc - PullRequest
1 голос
/ 15 марта 2012

Я пытаюсь изучить Java для Android и не знаю, как даже Google это. Мне было интересно, есть ли способ программно прикрепить число к концу R.id.variable или R.drawable.variable и т. Д.?

По сути, у меня есть несколько изображений, помеченных как image1, image2, image3 и т. Д. Я хочу обновить ImageView для отображения на основе другой переменной. Поэтому, если переданная переменная равна «1», она обновит представление до «image1». Если это «2», он обновит «image2» и так далее, но я не знаю, есть ли способ присоединить «1» к «R.drawable.image» при вызове обновления.

Как лучше всего это сделать?

Ответы [ 4 ]

3 голосов
/ 15 марта 2012

Может помочь:

Ваши изображения: image1.png, image2.png, ...., imageN.png

Вы можете найти их идентификатор:

getResources().getIdentifier("IMAGE_NAME", "drawable", context.getPackageName())

Итак:

 int idImage1 = getResources().getIdentifier("image1", "drawable", context.getPackageName())
 int idImage2 = getResources().getIdentifier("image2", "drawable", context.getPackageName())
  .....
 int idImageN = getResources().getIdentifier("imageN", "drawable", context.getPackageName())
0 голосов
/ 15 марта 2012

Чтобы получить ресурс по динамическому имени, используйте getIdentifier () .Эта функция берет строку и возвращает идентификатор ресурса с этим именем

Вот пример из моего кода, где я получаю идентификатор ресурса строкового ресурса с именем "run_ произвольное-целое число _summary ":

getResources().getIdentifier(
            String.format("run_%d_summary", mSelectedRun),
            "string", 
            getPackageName()
            );

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

0 голосов
/ 15 марта 2012

Используйте массив! Конечно, вы можете использовать любую структуру данных, какую захотите, вы можете обнаружить, что List (в частности, ArrayList) позволяет вам использовать еще несколько API-интерфейсов Collections. В качестве альтернативы, если вы хотите сослаться на свои изображения по имени, вы можете использовать карту.

Image[] myImages = new Image[n];
//populate images e.g. myImages[0] = new Image();

void updateImage(int imageNo) {
    Image i = myImages[imageNp]; //arrays start at 0 not 1
    //do stuff to i
}
0 голосов
/ 15 марта 2012

То, о чем вы говорите, называется Отражение .Это может немного запутать, поэтому для описываемой вами ситуации, вероятно, лучше иметь ваши изображения в массиве или списке и использовать аргумент в качестве индекса для их получения.

...