我想引用在不同方法中定义的内部类中的非final变量

Ben*_*enH 4 java android

我正在编写一个Android应用程序,其中我有几个按钮布局在网格中.我想设置每个按钮的onClick方法,所以我写了这个:

for (int i = 0; i < button.length; i++) {
    for (int j = 0; j < button[0].length; j++) {
        button[i][j].setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                press(i, j);
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

press(int i, int j)别处实施的地方.我得到错误,"不能引用在不同方法中定义的内部类中的非最终变量i".

所以,现在我只需写出每个函数,如下所示:

button[0][0].setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        press(0, 0);
    }
});

button[0][1].setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        press(0, 1);
    }
});

// more like this...
Run Code Online (Sandbox Code Playgroud)

这有效,但看起来很傻.有没有更好的办法?

Voj*_*vic 6

是的,试试这个:

for (int i = 0; i < button.length; i++) {
    for (int j = 0; j < button[0].length; j++) {
        final int listenerI = i;
        final int listenerJ = j;
        button[i][j].setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                press(listenerI, listenerJ);
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)