1

我正在使用我在某处找到的开源数字选择器(感谢 Jeffrey F. Cole),但我刚刚发现了一个错误。

numberpicker 有一个处理程序,可以在您触摸按钮时更快地增加数字

long`private Handler repeatUpdateHandler = new Handler();

`

    class RepetetiveUpdater implements Runnable {
    public void run() {
        if (autoIncrement) {
            increment();
            repeatUpdateHandler.postDelayed(new RepetetiveUpdater(),
                    REPEAT_DELAY);
        } else if (autoDecrement) {
            decrement();
            repeatUpdateHandler.postDelayed(new RepetetiveUpdater(),
                    REPEAT_DELAY);
        }
    }
}

 .....

public class NumberPicker extends LinearLayout {

 .....

    // Auto increment for a long click
    increment.setOnLongClickListener(new View.OnLongClickListener() {
        public boolean onLongClick(View arg0) {
            autoIncrement = true;
            repeatUpdateHandler.post(new RepetetiveUpdater());
            return false;
        }
    });

    // When the button is released, if we're auto incrementing, stop
    increment.setOnTouchListener(new View.OnTouchListener() {
        public boolean onTouch(View v, MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_UP && autoIncrement) {
                autoIncrement = false;
            }
            return false;
        }
    });

问题是当您长按按钮时,计数器开始增加,但是当您按住手指并在屏幕上拖动手指时,即使您抬起手指,计数器也会继续增加。

那么如何检测到手指离开我的数字选择器布局并停止计数器呢?

谢谢 :)

4

1 回答 1

1

我不太确定这是一个错误,我什至不确定它是否来自这个数字选择器在 API 本身的数字选择器之上所做的更改。我假设处理选择器递增和递减的按钮设置为继续运行,直到收到 ACTION_UP MotionEvent,但这可能过于简化了。

编辑:

我已经在库存的 Android 2.3.3 上对此进行了测试,这正是结果。

编辑:

根据您在评论中的澄清,这听起来确实是一个非常糟糕的错误。看起来您需要做的是让处理程序删除对 ACTION_UP 中可运行对象的回调。您可以将我链接到该项目,以便我可以尝试提交补丁吗?

编辑

您提供的 NumberPicker 没有正确使用处理程序,IMO。与其保持对同一个 Handler 的引用以便以后可以删除回调,不如在每次发布时创建一个新的。我做了一些更改并修复了这里的问题:https ://gist.github.com/3657989

于 2012-09-06T14:23:22.000 回答