2014-01-07 2 views
0

У меня есть ресурсы для изображений в папке /res, скажем, больших пальцев. Теперь у меня есть 30 больших пальца и что я делаю сейчас, чтобы начать массив является:Разбирать строку как имя ресурса

Drawable[] thumbs = new Drawable[30]; 
thumbs[0] = context.getResources().getDrawable(R.drawable.thumb_01); 
thumbs[1] = context.getResources().getDrawable(R.drawable.thumb_02); 
thumbs[2] = context.getResources().getDrawable(R.drawable.thumb_03); 
//this way 27 times more 

Есть ли способ цикла это как-то не создавая длинный массив?

ответ

1

Вы можете создать массив int, который будет содержать значения ваших ресурсов. Затем просто пропустите этот массив.

int [] array = {R.drawable.thumb_01, R.drawable.thumb_02, ...}; 
Drawable[] thumbs = new Drawable[array.length]; 
for(int i = 0; i < array.length; i++){ 
    thumbs[i] = context.getResources().getDrawable(arr[i]); 
} 


EDIT:

Кажется, что имена ваших следует вводимым коэффициент определенной логики. Поэтому вы можете использовать getIdentifier (String name, String defType, String defPackage):

Drawable[] thumbs = new Drawable[theLength]; 
Resources r = context.getResources(); 
for(int i = 0; i < theLength; i++){ 
    String name = i < 10 ? "thumb_0"+i : "thumb_"+i; 
    int drawableId = r.getIdentifier(name, "drawable", context.getPackageName()); 
    thumbs[i] = r.getDrawable(drawableId); 
} 
+0

в любом случае необходимо создать большой массив, идея состоит в том, чтобы сделать петлю для произвольного числа но в любом случае спасибо – Roman

+0

@ Roman, если вы уверены, что имена ваших drawables следуют определенной логике, вы можете использовать 'getIdentifier'. –

2

Надеюсь, я правильно понимаю ваш вопрос. Если это так, у меня очень похожая ситуация в приложении, которое я разрабатываю. То, что вы можете сделать, это объявить массив Drawables и добавить каждый новый Drawable в массив, когда вы зацикливаете каждый «большой палец» в своих ресурсах. Я предполагаю, что существует конечное количество больших пальцев, поскольку вы извлекаете их из своих ресурсов. Если это так, вы также можете указать в своем файле, который содержит большие пальцы, сколько у него больших пальцев.

//assume you assign the number of thumbs to integer 'R.integer.numberofthumbs' 
int numberOfThumbs = context.getResources().getInteger(R.integer.numberofthumbs); 
Drawable[] thumbs = new Drawable[numberOfThumbs]; 

for(int i = 0; i < numberOfThumbs; i++){ 
    thumbs[i]= getResources().getDrawable(getResources().getIdentifier("thumb_" + i, "drawable", getPackageName())); 
} 

Это по существу метод, который я использую в своем коде, и он отлично работает. Из-за именования в цикле for большие пальцы с метками с номерами до 10 должны иметь нулевой начальный нуль. Однако это можно легко изменить в соответствии с вашим текущим методом именования. Надеюсь, я не слишком далеко, и это действительно помогает.

Приветствия

0

Наконец, я получил его с меньшим количеством кода можно и без создания массива с Интс или вводимого коэффициента.

Создать /res/values/array.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
<string-array name="thumbs"> 
    <item>@drawable/thumb_01</item> 
    <item>@drawable/thumb_02</item> 
    <item>@drawable/thumb_03</item> 
    <item>@drawable/thumb_04</item> 
    <item>@drawable/thumb_05</item> 
    <item>@drawable/thumb_06</item> 
    <item>@drawable/thumb_07</item> 
    <item>@drawable/thumb_08</item> 
    <item>@drawable/thumb_09</item> 
    <item>@drawable/thumb_10</item> 
    <item>@drawable/thumb_11</item> 
    <item>@drawable/thumb_12</item> 
    <item>@drawable/thumb_13</item> 
    <item>@drawable/thumb_14</item> 
    <item>@drawable/thumb_15</item> 
    <item>@drawable/thumb_16</item> 
    <item>@drawable/thumb_17</item> 
    <item>@drawable/thumb_18</item> 
    <item>@drawable/thumb_19</item> 
    <item>@drawable/thumb_20</item> 
</string-array> 
</resources> 

В коде

TypedArray thumbs = context.getResources().obtainTypedArray(R.array.thumbs); 
//in the loop 
image.setImageDrawable(context.getResources().getDrawable(thumbs.getResourceId(i, 0)); 
Смежные вопросы