循环通过很多drawables

时间:2016-12-20 14:29:50

标签: java android

基本上,我正在创建一个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尽可能简明扼要。

有什么想法吗?

1 个答案:

答案 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);
        }
    }
}