我的libgdx ClickListener出现了问题。
当我初始化我的按钮并在forloop中为每个按钮添加一个新的ClickListener时,所有按钮都会记录来自forloop的最后一个Int而不是我用它们创建的数字。
为什么会发生这种情况?解决此问题的最佳方法是什么?
for(i = 0; i<data.getLevelData().size(); i++){
buttonstyle = new ImageButtonStyle();
buttonstyle.up = skin.getDrawable("pause-up");
buttonstyle.down = skin.getDrawable("pause-down");
buttonstyle.pressedOffsetX = 1;
buttonstyle.pressedOffsetY = -1;
button.add(new ImageButton(buttonstyle));
button.get(i).addListener(new ClickListener(){
@Override
public void clicked(InputEvent event, float x, float y){
Gdx.app.log( "test", "" + i);
}
});
table.add(button.get(i)).expandX().pad(3).height(64).width(64);
rowcounter++;
if(rowcounter>5){
table.row();
rowcounter = 0;
}
}
我希望有人知道如何解决这个问题,以便阅读/帮助!
答案 0 :(得分:0)
他们都在查看您在for循环中初始化的i
。为每个监听器制作一个独特的副本,如下所示:
final int iCopy = i;
button.get(i).addListener(new ClickListener(){
@Override
public void clicked(InputEvent event, float x, float y){
Gdx.app.log( "test", "" + iCopy);
}
});
final
限定符可确保值无法从初始化时更改为。由于iCopy
在for-loop中具有范围而不是像i
那样在其外部,因此为每个侦听器创建了它的唯一版本。