我正在使用我在某处找到的开源编号码(感谢Jeffrey F. Cole),但我发现了一个错误。
数字选择器有一个处理程序,可以在您触摸按钮时更快地增加数字
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;
}
});
问题是当您长按按钮时计数器开始增加,但是当您用手指按住并在屏幕上拖动手指时,即使抬起手指,计数器也会不断累加。
那么如何检测到手指离开我的数字选择器布局并停止计数器?
Thx :)
答案 0 :(得分:1)
我不太确定这是一个错误,我甚至不确定它是来自这个数字选择器在API本身的数字选择器之上所做的更改。我认为处理递增和递减选择器的按钮被设置为继续运行直到收到ACTION_UP MotionEvent,但这可能过度简化了它。
编辑:
我已经在Android 2.3.3上测试了这个,这正是结果。
修改强>
根据您在评论中的澄清,这听起来像一个非常糟糕的错误。看起来你需要做的是让Handler在ACTION_UP中删除对该runnable的回调。你可以把我链接到项目,所以我可以尝试提交补丁吗?
修改强>
您提供的NumberPicker未正确使用处理程序,IMO。不是保持对同一个Handler的引用,以便以后可以删除回调,而是每次发布时都会创建一个新的回调。我做了一些更改并修复了问题:https://gist.github.com/3657989