我的/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
有没有办法在不创建长数组的情况下以某种方式循环?
答案 0 :(得分:2)
我希望我能正确理解你的问题。如果是这样,我正在开发的应用程序中有一个非常类似的情况。你可以做的是声明一个Drawables数组,并在循环浏览资源中的每个'thumb'时将每个新的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的拇指必须没有前导零。但是,这可以很容易地更改以适合您当前的命名方法。希望我没有太远,这实际上有所帮助。
干杯
答案 1 :(得分: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]);
}
编辑:
看来你的抽签&#39;名称遵循某种逻辑。所以你可以使用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);
}
答案 2 :(得分:0)
最后,我用更少的代码获得它,并且没有使用int或Drawables创建数组。
创建/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));