Android NumberPicker OnValueChangeListener
Posted
技术标签:
【中文标题】Android NumberPicker OnValueChangeListener【英文标题】: 【发布时间】:2013-05-11 13:44:24 【问题描述】:我有一个关于 android NumberPicker
的问题。
当用户在 NumberPicker
上执行 Fling 时,每一步都会触发 OnValueChange
的侦听器。我可以这样改变吗,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");
此方法称为 inonValueChange。它发送消息的速度太快,以至于我连接的设备无法及时做出反应。所以我需要以任何方式放慢速度。有谁知道如何在不让我的主线程休眠的情况下减慢它的速度?当它处于睡眠状态时,整个 GUI 在此期间没有响应。我尽量避免这种情况。
谢谢。
【问题讨论】:
【参考方案1】:您可以使用setOnScrollListener
代替setOnValueChangedListener
,并在滚动状态为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
);
请注意,您需要在侦听器中初始化 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
阅读NumberPicker.onScrollListener 文档了解更多信息。
【讨论】:
这还没有解决我的问题。我想做的是:只要它是一扔什么都不做。当它停止时,获取新值与投掷前值之间的差异。使用该值执行一些功能。此外,我想要相同的功能,当值仅通过单击而更改为 1 时,而不是一掷千金。每次以任何方式更改时,我都需要发送许多命令,这些命令与差异一样高。 查看更新后的响应是否符合您需要实施的内容 ;-) 2013 年添加,2021 年仍然有用 :)以上是关于Android NumberPicker OnValueChangeListener的主要内容,如果未能解决你的问题,请参考以下文章
我正在尝试使用 Android NumberPicker 小部件,但我不知道如何从 NumberPicker 设置值
Android零基础入门第58节:数值选择器NumberPicker