基本上,我正在创建一个Android应用程序,因为我们的课程在几天内毕业,我希望我们的老师有一个纪念我们的纪念品。所以我正在努力培养一批学生。
我们有38名学生,我把他们所有的名字都放在一个String []数组中:
private String[] classmateName = {"alpha", "beta", "gamma"...};
我还创建了一个Classmates.java
来帮助简化一切。 (我在这里排除了Getter和Setter,因为代码太长了):
public class Classmates {
String name;
int classNum;
int drawableId;
public Classmates(String name, int classNum, int drawableId) {
this.name = name;
this.classNum = classNum;
this.drawableId = drawableId;
}
public Classmates(String name, int classNum) {
this.name = name;
this.classNum = classNum;
}
}
这就是一切都被初始化的地方。我已将initializeData()
放在onCreate()
方法中,因此当用户启动应用时,首先会创建对象。
private void initializeData() {
classmates = new ArrayList<>();
for(int i=1;i<=38;i++)
{
//Exclude number 32
if(!(i==32)) classmates.add(new Classmates(classmateName[i],R.drawable.num(i)); //PROBLEM HERE!
}
}
正如你所看到的,我排除了第32位同学因为她不在这里了。她的名字仍然在classmateName
字符串数组中,所以我没有得到任何不匹配的名字。
这是问题的开始。正如您在上面的代码中所看到的,我已经评论了我遇到问题的地方。基本上,我要在/res/drawable
目录中保存此方法中的照片:
R.drawable.num1
R.drawable.num2
...
等等。但是,这两个不起作用:
R.drawable.num[i]
R.drawable.num(i)
Looking in other answers posted on StackOverflow,我不得不诉诸于此似乎很愚蠢:
private int[] drawables = {R.drawable.num1, R.drawable.num2, ... };
特别是当应该有38名成员时,我必须这样做。我希望我的MainActivity.java
尽可能简明扼要。
有什么想法吗?
答案 0 :(得分:1)
您是否尝试过getIdentifier()
?
private void initializeData() {
classmates = new ArrayList<>();
for (int i = 1; i <= 38; i++) {
//Exclude number 32
if (!(i == 32)) {
Context ctx = getContext();
int resId = ctx.getResources().getIdentifier(String.format("num%d", i), "drawable", ctx.getPackageName());
classmates.add(new Classmates(classmateName[i], resId);
}
}
}