당신은 루프 내부에 final
지역 변수를 선언 할 수있다,
for(int i = 0; i < level.myItems.size(); i++){
final int j = i;
itemsInInventory[i].setButtonListener(new UIButtonListener(){
public void pressed(UIButton button, Sprites sprite){
itemsInInventory[j].performAction();
}
});
}
또는 더 나은 당신은 단지 버튼을하지 i
필요하기 때문에 (
for(int i = 0; i < level.myItems.size(); i++){
final UIButton btn = itemsInInventory[i];
btn.setButtonListener(new UIButtonListener(){
public void pressed(UIButton button, Sprites sprite){
btn.performAction();
}
});
}
또는 더 나은을 아마도 이후 pressed
의 첫 번째 인수는 버튼 자체입니다.
for(int i = 0; i < level.myItems.size(); i++){
itemsInInventory[i].setButtonListener(new UIButtonListener(){
public void pressed(UIButton button, Sprites sprite){
button.performAction();
}
});
}
마지막 버전에서는 각 버튼마다 별도의 UIButtonListener
이 필요하지 않습니다. 모든 리스너가 동일한 리스너를 갖도록 설정하면 청취자가 해당 버튼에 자동으로 디스패치합니다.
UIButtonListener listener = new UIButtonListener(){
public void pressed(UIButton button, Sprites sprite){
button.performAction();
}
};
for(int i = 0; i < level.myItems.size(); i++){
itemsInInventory[i].setButtonListener(listener);
}
이는 인라인 함수가 아니며 익명입니다. – chrylis
'i'를 클래스 내 전역 변수로 만듭니다. 그렇다면 최종화 할 필요가 없으며'public void pressed' 내에서 액세스 할 수도 있습니다. –