Android итерации по просмотрам по Id - PullRequest
0 голосов
/ 22 ноября 2011

У меня есть макет, который содержит 4 TextViews с идентификаторами: «Name1», «Name2», «Name3», «Name4»

Я хотел бы перебирать их с помощью цикла forспособ сделать это?

что-то вроде

    for(int i = 1; i <= 4; i++)
    {
        findViewById(R.id."Name" + i)
    }

Я знаю, что этот код далеко от реальности, но какая-нибудь помощь?Спасибо!Рон

Ответы [ 2 ]

5 голосов
/ 22 ноября 2011

Нет, вы не можете так делать, потому что R.id.xyz ссылается на static int статического класса. Это не строка, которая может быть объединена таким образом. Кроме того, ваш код игнорирует возвращаемое значение findViewById, поэтому он ничего не делает (хотя я понимаю, что вы упомянули, что код далеко не реален, но фактический вариант использования может помочь уточнить, что вы пытаетесь сделать). R.id. «Имя» ничего не значит и выдаст вам ошибку компилятора.

Чтобы перебрать, вы можете сделать что-то вроде этого:

int[] ids = {R.id.foo, R.id.bar};

затем

for(int i = 0; i<ids.length; i++) {
View v = findViewById(ids[i]);
}
0 голосов
/ 22 ноября 2011

Конечно, вы можете сделать это.Вы не можете получить доступ к члену R.id, используя строковый литерал, вы должны ввести имя переменной.R.id."Test" не хорошо, но R.id.Test хорошо.

Если вы изучите тип R.id.XYZ, вы обнаружите, что это просто целое число.Нет причин, по которым вы не можете выполнять основную арифметику со значениями id.

Однако на самом деле это не имеет смысла.Когда вы создаете свой APK, компилятор автоматически создает статический класс с именем R, который содержит ссылки на различные ресурсы и ресурсы, содержащиеся в вашем APK, такие как макеты, рисование, звуки и т. Д.знать, что целочисленное значение для R.id.button1 равно X, нет никакой гарантии, что целочисленное значение для R.id.button2 будет равно X + 1, фактически это может быть что угодно.создайте список TextViews, чтобы выполнить итерацию, подумайте о добавлении их в список, а затем итерации по списку.Вот так:

ArrayList<TextView> list = new ArrayList<TextView>();
list.add( (TextView) findViewById(R.id.textView1) );
list.add( (TextView) findViewById(R.id.textView2) );
list.add( (TextView) findViewById(R.id.textView3) );
list.add( (TextView) findViewById(R.id.textView4) );

int size = list.getSize();
for (int i=0; i< size; i++)
{
     TextView tv = list.get(i);
     // Do something with tv like set its label to i
     tv.setText(Integer.toString(i));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...