Я пытаюсь настроить большое количество OnClickListeners через цикл for. Каждое представление должно запускать метод при нажатии; представление 0 должно запускать метод со значением 0, представление 1 со значением 1 и т. д.
Однако, если я объявляю OnClickListener с помощью переменной, которая увеличивается через циклы for, OnClickListener запоминает ссылку на переменную, а не на значение переменной во время ее объявления.
Это, вероятно, не очень понятно - вот код:
for (int i = 0; i < 20; i++) {
cells[i] = (ImageView) findViewById(cellIDs[i]);
cells[cellnumber++].setOnClickListener(new OnClickListener() {
public void onClick(View v){
cellClicked(cellnumber, v);
}
});
}
Это правильно настраивает OnClickListeners для каждой ячейки, но в зависимости от того, какая из них нажата, она всегда выполняет вызовы cellClicked со значением 21.
Я знаю, что могу вручную настроить OnClickListeners, используя cell[0]
. , , cellClicked(0, v),
но есть ли способ сделать это так, чтобы ClickListener передавал значение переменной, а не ссылку на переменную в цикле for?
(Я видел несколько страниц, на которых говорилось, что Java обычно работает с передачей значений, а не ссылок, но я предполагаю, что библиотеки Android каким-то образом делают это по-другому, и, следовательно, мои трудности здесь.)