Java setOnTouchListener中的访问循环变量
我正在循环中创建OnTouchListeners:Java setOnTouchListener中的访问循环变量,java,android,ontouchlistener,ontouch,Java,Android,Ontouchlistener,Ontouch,我正在循环中创建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", getPack
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;
}
});
}
}
for(int i=0;i
如何访问setOnTouchListener函数中的变量I和j。我不能将它们声明为final,因为它们是循环变量。(inti=0;ifor(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;
}
});
}
}
最终int iNow=i;
对于(int j=0;j<按钮[i]。长度;j++){
最终整数jNow=j;
字符串buttonID=“button”+i+j;
int resID=getResources().getIdentifier(buttonID,“id”,getPackageName());
按钮[i][j]=(按钮)findViewById(剩余);
按钮[i][j].setOnTouchListener(新视图.OnTouchListener(){
@凌驾
公共布尔onTouch(视图arg0、运动事件arg1){
if(arg1.getAction()==MotionEvent.ACTION\u向下){
发出(“按钮按下”、“按钮”+iNow+jNow”);
返回false;
}
如果(arg1.getAction()==MotionEvent.ACTION\u UP){
插座发射(“按钮向上”,“按钮”+iNow+jNow);
返回false;
}
返回true;
}
});
}
}
我只是简单地将当前按钮的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;
}
});
}
}
for(int i=0;i
全局获取变量。是否确实要创建那么多触控式侦听器?在按钮上设置标签,并在全局触控模式下检索此标签listener@Olayinka我该怎么做?