sch*_*hel 1 android valuechangelistener numberpicker
我有一个关于Android的问题NumberPicker.当用户在a上执行Fling时NumberPicker,OnValueChange触发Listener for的每一步.我可以通过这种方式更改它,oldVal和newVal可能相互之间的差异超过1,并且只触发一次Listener吗?
提前致谢.
编辑:我将尝试在我的代码中更具体地解释它.
int diff = Math.abs(newVal - oldVal);
if (newVal - oldVal > 0) {
sendMessage(te);
for (int i = 0; i < diff; i++) {
sendMessage(plus);
}
sendMessage(te);
} else if (newVal - oldVal < 0) {
sendMessage(te);
for (int i = 0; i < diff; i++) {
sendMessage(minus);
}
sendMessage(te);
} else {
if (D)
Log.w(TAG, "This should NEVER happen");
}
Run Code Online (Sandbox Code Playgroud)
此方法称为inonValueChange.它发送的消息太快,无法让我连接的设备及时做出反应.所以我需要以任何方式放慢速度.有没有人知道如何减慢它,而不让我的主线程睡眠?当它处于休眠状态时,整个GUI在此期间没有响应.我尽量避免这种情况.
谢谢.
而不是setOnValueChangedListener你可以使用setOnScrollListener,并在滚动状态时获取选择器的值SCROLL_STATE_IDLE.检查此示例:
numberPicker.setOnScrollListener(new NumberPicker.OnScrollListener() {
private int oldValue; //You need to init this value.
@Override
public void onScrollStateChange(NumberPicker numberPicker, int scrollState) {
if (scrollState == NumberPicker.OnScrollListener.SCROLL_STATE_IDLE) {
//We get the different between oldValue and the new value
int valueDiff = numberPicker.getValue() - oldValue;
//Update oldValue to the new value for the next scroll
oldValue = numberPicker.getValue();
//Do action with valueDiff
}
}
});
Run Code Online (Sandbox Code Playgroud)
请注意,您需要oldValue在侦听器中初始化变量的值.如果需要创建通用侦听器(可以接收任何值数组),则可以创建一个NumberPicker.OnScrollListener在构造函数中实现和接收初始值的自定义类.像这样的东西:
public class MyNumberPickerScrollListener implements NumberPicker.OnScrollListener {
private int oldValue;
public MyNumberPickerScrollListener(int initialValue) {
oldValue = initialValue;
}
@Override
public void onScrollStateChange(NumberPicker numberPicker, int scrollState) {
if (scrollState == NumberPicker.OnScrollListener.SCROLL_STATE_IDLE) {
//We get the different between oldValue and the new value
int valueDiff = numberPicker.getValue() - oldValue;
//Update oldValue to the new value for the next scroll
oldValue = numberPicker.getValue();
//Do action with valueDiff
}
}
}
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请阅读NumberPicker.onScrollListener文档.