Избегайте, если это возможно. Шаг назад и переосмыслить, если вам действительно нужно это сделать так, как это дорогостоящая операция, и, вероятно, есть лучшие способы сделать это.Android number1.setImageResource (R.drawable.n + "1"); Объяснение
ответ
Вы можете использовать метод, чтобы преобразовать строку в Int идентификатор:
public static int getStringIdentifier(Context context, String name) {
return context.getResources().getIdentifier(name, "drawable", context.getPackageName());
}
Pass в деятельности в качестве параметра контекста (или любого другого экземпляра контекста). Затем вы можете использовать идентификатор, как обычно, с методом getString().
Обратите внимание, что преобразование из строки в идентификатор использует отражение и, следовательно, может быть не так быстро, поэтому используйте внимательно. См: This SO post
Пример использования: number1.setImageResource(getStringIdentifier(this,String.valueOf(n+rnd)));
Метод setImageResource
ожидает целое число, которое генерируется и сохраняется в файле R, так что добавление строки к методу не будет работать.
К счастью, Android действительно обеспечивает способ использовать под названием getIdentifier
getResources().getIdentifier("n1", "drawable", this.getPackageName());
Этот метод является медленным, так что если вы вызываете его кучу раз, это может быть лучше вместо загрузки все ресурсы как растровые изображения в начале и затем установите ImageView ресурс быть любой растровый вам нужно во время
Bitmap[] numbers = new Bitmap[9]
for(int i=1; i<=9; i++) {
numbers[i] = BitmapFactory.decodeResource(getResources(), getResources().getIdentifier(("n"+i), "drawable", this.getPackageName()););
}
затем вы можете сделать метод для вызова
private void setNumber(int i) {
image.setImageBitmap(numbers[i]);
}
Если вы используете только эти 9 чертежей, просто создайте массив для хранения значений идентификаторов ресурсов этих чертежей.
static final int[] RESOURCE_IDS = {
0, // empty value so that i = 1 corresponds to R.drawable.n1
R.drawable.n1,
...
R.drawable.n9
};
Random rand = new Random();
int resourceId = RESOURCE_IDS[rand.nextInt(9)+1]; // random integer from 1-9
mImageView.setImageResource(resourceId);
- 1. Android setImageResource на imageButton
- 2. setImageResource in android
- 3. Android: setImageResource с LayoutInflater
- 4. Android: SetImageResource и OnDraw
- 5. setImageResource
- 6. SetImageResource не отображается в android
- 7. Объяснение предложения 1 = 1 SQL
- 8. setImageResource не работает в Android
- 9. Android ImageButton setImageResource от переменной
- 10. Объяснение `lapply (lst," [", 1,)`
- 11. Java setImageResource
- 12. Синтаксическое объяснение [target == t, 1]
- 13. пронумерованные изображения на setImageResource
- 14. Android setImageResource вызывает приложение для краха
- 15. Android:. Не может разрешить символ «setImageResource»
- 16. Разработка Android: setImageResource Заставляет Force Close?
- 17. Android: установите случайное изображение с помощью setImageResource
- 18. Android учебник - setImageResource и Grid View
- 19. Не могу setImageResource
- 20. setImageResource вызывает сбой
- 21. Android Task Affinity Объяснение
- 22. Android runOnUiThread объяснение
- 23. Android источник Java объяснение
- 24. Android «тост» команда объяснение
- 25. Android: Объяснение интеграции Proguard
- 26. Android Button.setClickOnListener объяснение
- 27. setImageResource, вызывающий сбой приложения
- 28. Почему typeof возвращает «string1» или «number1»
- 29. Возможно, переменная 'number1' не была инициализирована
- 30. setImageResource() со значением AttrS