Java Libgdx使用ClickListener记录错误的整数

Java Libgdx使用ClickListener记录错误的整数,java,button,libgdx,Java,Button,Libgdx,我的libgdx ClickListener有问题 当我初始化按钮并在forloop中为每个按钮添加一个新的ClickListener时,所有按钮都会记录forloop中的最后一个Int,而不是我创建它们时使用的数字 为什么会发生这种情况?解决此问题的最佳方法是什么 for(i = 0; i<data.getLevelData().size(); i++){ buttonstyle = new ImageButtonStyle(); buttonstyle.up = ski

我的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;
    }
}
(i=0;i5)的
{
table.row();
行计数器=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循环内部,而不是像
i
那样在for循环外部,因此为每个侦听器创建了一个独特的版本。

非常感谢,这正是我想要的!