2015-02-25 2 views

ответ

2

Вы можете использовать метод, чтобы преобразовать строку в 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)));

1

Метод 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]); 
} 
1

Если вы используете только эти 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); 
Смежные вопросы