あなたは、ループ内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'内でアクセスすることもできます。 –