Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 安卓OnTouch赢得';t执行返回命令_Java_Android_Intellij Idea_Ontouchlistener - Fatal编程技术网

Java 安卓OnTouch赢得';t执行返回命令

Java 安卓OnTouch赢得';t执行返回命令,java,android,intellij-idea,ontouchlistener,Java,Android,Intellij Idea,Ontouchlistener,这个问题快把我逼疯了。我肯定我做错了什么,但我想不出来 我有一个静态OnTouchListener,它连接到linearlayout中包含的许多相同的复合视图对象的TextView。此侦听器位于帮助器类中 public static View.OnTouchListener getValueTouchListener() { return new View.OnTouchListener() { private int lastY; private

这个问题快把我逼疯了。我肯定我做错了什么,但我想不出来

我有一个静态OnTouchListener,它连接到linearlayout中包含的许多相同的复合视图对象的TextView。此侦听器位于帮助器类中

    public static View.OnTouchListener getValueTouchListener() {
    return new View.OnTouchListener() {
        private int lastY;
        private int lastX;

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            TextView view = (TextView)v;
            int action = event.getActionMasked();
            switch (action) {
                case MotionEvent.ACTION_DOWN:
                    view.setBackgroundResource(R.drawable.cog_pressed);
                    lastY = (int)event.getY();
                    lastX = (int)event.getX();
                    return true;
                case MotionEvent.ACTION_MOVE:
                    //calc size of movement
                    int deltaY = lastY - (int)event.getY();
                    int deltaX = lastX - (int)event.getX();
                    // pass gesture up to parent if it's a big x movement - assumes user wishes to scroll parent
                    if (Math.abs(deltaX) > TOUCH_SLOP *2) {
                        return false;
                    }
                    lastX = (int)event.getX();
                    //process movement if larger than a touch slop
                    if (StrictMath.abs(deltaY) > TOUCH_SLOP) {
                        // reset last touch position
                        lastY = (int)event.getY();
                        //get direction of movement
                        int dir = (deltaY < 0)? -1 : 1;
                        //change index if within min and max limits
                        int min = (view.getTag() == Chainring.KEY)? Chainring.MIN_COG : Sprocket.MIN_COG;
                        int max = (view.getTag() == Chainring.KEY)? Chainring.MAX_COG : Sprocket.MAX_COG;
                        int value = Integer.valueOf(view.getText().toString());
                        if ((dir == -1 && value > min) || (dir == 1 && value < max)) {
                            value = value + dir;
                            view.setText(String.valueOf(value));
                            view.playSoundEffect(SoundEffectConstants.CLICK);
                        }
                    }
                    return true;
                case MotionEvent.ACTION_UP:
                    view.setBackgroundResource(R.drawable.cog_unpressed);
                    return true;
                case MotionEvent.ACTION_CANCEL:
                    view.setBackgroundResource(R.drawable.cog_unpressed);
                    return false;
                default:
                    return false;
            }
        }
    };
}
我的问题是,在ACTION\u DOWN、ACTION\u UP和ACTION-MOVE情况下,该方法似乎没有执行return命令。例如,当一个ACTION_关闭时,代码执行到return命令为止,但随后直接进入默认情况并返回false,即使Logcat仍将该操作报告为ACTION-DOWN

如果我试图在返回命令上设置断点,IntelliJ会说:“在com.amb.GearBuddyV2.views.CogPickerHelper$2类的X行中找不到可执行代码”


有人知道我做错了什么吗?

您的代码似乎工作正常,返回值正确


是的,在return语句中添加一个break将导致调试器抱怨缺少可执行代码。

我想这是我的观点,代码不起作用。我无法在前三种情况下返回true,因此我基本上无法使用该事件。。。而且,从逻辑上讲,我不理解当每种情况都以return语句结束时,如何在同一过程中切换到两种情况。此外,我还可以在ACTION_CANCEL案例中的return语句上添加一个断点,令人烦恼的是,该断点将返回值并允许我使用事件。调试似乎荒谬地将您引入了两种不同的案例,可能是因为编译器对开关代码进行了优化,调试器无法很好地将其与实际源代码匹配。您是否尝试过使用布尔变量首先保留返回值,而不是立即返回?调试器应该允许您逐步完成这个简单的变量分配,并向您显示要返回的具体分配内容。谢谢您的评论,kheld。我创建了一个布尔值,然后用一个break命令结束每个案例。。。它确实如你所期望的那样工作。我会按照这个计划去做——可惜我不明白为什么一个可行,另一个不行。
        mValueTextView.setOnTouchListener(CogPickerHelper.getValueTouchListener());