Android Java: R.id.variable1..variable2..variable3..etc

1

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

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

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

  • 0
    Будет ли работать TypedArray ?
Теги:
variables
r.java-file

4 ответа

3
Лучший ответ

Может быть, помощь:

Ваши изображения: 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
    Также стоит уточнить, что первый параметр может быть построен динамически, т.е. / getResources().getIdentifier("image" + label, "drawable", etc.) где label является параметром
  • 0
    Очевидно, я не набираю достаточно быстро сегодня :)
Показать ещё 1 комментарий
0

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

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

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

0

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

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню