首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >setOnTouchListener中的访问循环变量

setOnTouchListener中的访问循环变量
EN

Stack Overflow用户
提问于 2015-05-29 03:46:38
回答 2查看 122关注 0票数 0

我正在循环中创建OnTouchListeners:

代码语言:javascript
运行
复制
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。我不能宣布它们是最终的,因为它们是循环变量。另一种方法是什么。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-29 23:36:21

最后,我只需在循环中返回当前按钮的id:

代码语言:javascript
运行
复制
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;
                }
            });
        }
    }
票数 0
EN

Stack Overflow用户

发布于 2015-05-29 03:48:46

代码语言:javascript
运行
复制
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;
                }
            });
        }
    }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30520774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档