我正在循环中创建OnTouchListeners:
for(int i = 0; i < buttons.length; i++){
for(int j = 0; j < buttons[i].length; j++ ){
String buttonID = "button" + i + j;
int resID = getResources().getIdentifier(buttonID, "id", getPackageName());
buttons[i][j] = (Button) findViewById(resID);
buttons[i][j].setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View arg0, MotionEvent arg1) {
if (arg1.getAction() == MotionEvent.ACTION_DOWN){
socket.emit("button down", "button" + i + j);
return false;
}
if (arg1.getAction() == MotionEvent.ACTION_UP){
socket.emit("button up", "button" + i + j);
return false;
}
return true;
}
});
}
}如何访问setOnTouchListener函数中的变量i和j。我不能宣布它们是最终的,因为它们是循环变量。另一种方法是什么。
发布于 2015-05-29 23:36:21
最后,我只需在循环中返回当前按钮的id:
for(int i = 0; i < buttons.length; i++){
for(int j = 0; j < buttons[i].length; j++ ){
String buttonID = "button" + i + j;
int resID = getResources().getIdentifier(buttonID, "id", getPackageName());
buttons[i][j] = (Button) findViewById(resID);
buttons[i][j].setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View arg0, MotionEvent arg1) {
if (arg1.getAction() == MotionEvent.ACTION_DOWN){
socket.emit("button down", getResources().getResourceEntryName(arg0.getId()));
return false;
}
if (arg1.getAction() == MotionEvent.ACTION_UP){
socket.emit("button up", getResources().getResourceEntryName(arg0.getId()));
return false;
}
return true;
}
});
}
}发布于 2015-05-29 03:48:46
for(int i = 0; i < buttons.length; i++){
final int iNow = i;
for(int j = 0; j < buttons[i].length; j++ ){
final int jNow = j;
String buttonID = "button" + i + j;
int resID = getResources().getIdentifier(buttonID, "id", getPackageName());
buttons[i][j] = (Button) findViewById(resID);
buttons[i][j].setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View arg0, MotionEvent arg1) {
if (arg1.getAction() == MotionEvent.ACTION_DOWN){
socket.emit("button down", "button" + iNow + jNow);
return false;
}
if (arg1.getAction() == MotionEvent.ACTION_UP){
socket.emit("button up", "button" + iNow + jNow);
return false;
}
return true;
}
});
}
}https://stackoverflow.com/questions/30520774
复制相似问题