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

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

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

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


person user1269977    schedule 15.03.2012    source источник
comment
Будет ли работать TypedArray?   -  person Josh Lee    schedule 15.03.2012


Ответы (4)


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

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

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

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

So:

 int idImage1 = getResources().getIdentifier("image1", "drawable", context.getPackageName())
 int idImage2 = getResources().getIdentifier("image2", "drawable", context.getPackageName())
  .....
 int idImageN = getResources().getIdentifier("imageN", "drawable", context.getPackageName())
person Vyacheslav Shylkin    schedule 15.03.2012
comment
также стоит уточнить, что первый параметр может быть построен динамически, т.е. / getResources().getIdentifier("image" + label, "drawable", etc.), где label - это параметр - person edthethird; 15.03.2012
comment
Сегодня я явно недостаточно быстро печатаю :) - person Matt Gibson; 15.03.2012
comment
Идеально. Это то, что я искал. Спасибо. - person user1269977; 15.03.2012

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

person Thomas    schedule 15.03.2012

Используйте массив! Вы, конечно, можете использовать любую структуру данных, которую хотите, вы можете обнаружить, что список (в частности, 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
}
person brain    schedule 15.03.2012

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

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

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

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

person Matt Gibson    schedule 15.03.2012