2015-05-21 7 views
1

Это кажется очень простым, но я не понимаю, как это сделать, и не понял, как это сделать для Google. У меня есть набор из 12 ImageViews объявленных в XML, поэтому я хочу, чтобы объявить их все в цикле, используя что-то вродеДинамически выбирать переменную в цикле

for(int i = 1; i < 13; i++) { 
    ImageView moles[i] = FindViewById(R.id.mole + i); 
} 

Но я не понимая, как объявить аргумент для FindViewById.

+0

Вы не можете, если вы не используете отражение, которое вы не хотите. Есть ли какой-нибудь Android API, который позволяет вам передавать идентификатор в виде строки? – immibis

ответ

1

Обычно вы делаете жесткий кодированный массив идентификаторов

int ids[] = {R.id.image1, R.id.imag2,...}; 
for(int i = 0; i < ids.size; i++) { 
    ImageView moles[i] = FindViewById(ids[i]); 
} 
1

R.id.mole динамически генерируется Android SDK. Это int, правильно, но вы не можете использовать как int, потому что следующий не нужен предыдущий + 1.

Если вы используете динамически генерируемые ids, предположите, что они случайны.

1

Вы не можете сделать это. Но ближе вы можете получить, выполнив эту

private static final int[] imageArray = {R.id.mole1, R.id.mole2, R.id.mole3, R.id.mole4, R.id.mole5}; 
private ImageView[] moles= new ImageView[idArray.length]; 

Тогда ваш цикл будет выглядеть примерно так

for (int i=1; i<=imageArray.length; i++) { 
    moles [i] = (ImageView)findViewById(idArray[i]); // Fetch the view id from array 
    .... 
} 
+0

Финал не нужен, если вы не хотите передавать индекс слушателю, который вы объявляете внутри этого цикла. Вы можете просто использовать i –

Смежные вопросы