我将一些可绘制的图像(fx。我有一些名为image_1,image_2等的图像)作为片段中的标题图像传播。当我硬编码可用的图像数量时,图像会随机加载,并生成从0到此数字的随机索引。
mHeaderBackgroundImagesCount
是决赛:
private int getHeaderBackground() {
// Random index between 0 and mHeaderBackgroundImagesCount
Random rand = new Random();
int index = rand.nextInt(mHeaderBackgroundImagesCount) + 1;
return getResources()
.getIdentifier("image_" + index, "drawable", getPackageName());
}
由于硬编码通常不是正确编程的方法,因此我想动态地找出有多少' image_X'我有的drawables并将其设置为mHeaderBackgroundImagesCount
。
我想对strings.xml
资源文件中的字符串执行相同的操作,因为我还会在每个页面加载时传播一些字符串。
解决方案更新
此更新受以下 Lalit Poptani 建议的启发。它包括语法更正和优化,并已经过测试,可以使用。
private int countResources(String prefix, String type) {
long id = -1;
int count = -1;
while (id != 0) {
count++;
id = getResources().getIdentifier(prefix + (count + 1),
type, getPackageName());
}
return count;
}
System.out.println("Drawables counted: " + countResources("image_", "drawable"));
System.out.println("Strings counted: " + countResources("strTitle_", "string"));
注意:此方法假定计算的资源从索引1开始,并且没有像image_1
image_2
<hole>
image_4
等索引孔,因为它将首先终止id = 0的场合因此导致计数错误。
答案 0 :(得分:1)
我不确定是否可以动态获取资源或绘图数量。
解决此问题的一种方法是使用字符串数组作为strings.xml
中的资源。
e.g。
<resources>
<string-array name="foo_array">
<item>abc1</item>
<item>abc2</item>
<item>abc3</item>
</string-array>
int count = getResources().getStringArray(R.array.foo_array).length;
答案 1 :(得分:1)
如果您确定您的drawable列表将按照image_1,image_2,...等顺序排列,那么您可以应用以下逻辑,
int count = 0;
int RANDOM_COUNT = 10; //which is more than your drawable count
for (int i = 1; i < RANDOM_COUNT; i++){
int id = getResources().getIdentifier("ic_launcher_"+i,
"drawable", getPackageName());
if(id != 0){
count = + count;
}
else{
break;
}
}
Log.e(TAG, "This is your final count of drawable with image_x - "+ count);
你使用这个逻辑是因为没有任何名称可绘制为image_x然后id将为0并且你可以打破循环