当Android中NumberPicker不只滚动(按加号或减号)时,如何从onValueChange获取NumberPicker实例的值 [英] How to get value of the NumberPicker instance from onValueChange when The NumberPicker not scrolling only(pressing plus or minus buttons) in Android
问题描述
我有一个NumberPicker实例,它可以按预期工作,但是当滚动停止或用户仅按增减按钮时,我需要从中获取值. 我应该得到的值显示在文本视图中.
I have a NumberPicker instance and it works as expected but I need to get value form it when scrolling stops Or when the user only press increments / decrements Button is pressed. the value that i should get it are displayed in the text view.
当滚动停止/变为空闲并正确显示时,我设法获得了该值(在onScrollChanged()
侦听器中完成).
i managed to get the value when scrolling stops/ became idle and displayed correctly(this done in onScrollChanged()
listener).
,但是当用户按下增量或减量按钮时,不会触发onScrollChanged()
侦听器,并且如果我使用onValueChanged()
侦听器,则文本会更新,但滚动变得非常缓慢和缓慢(由于value一直更新更改).
but the onScrollChanged()
listener won't be fired when user press on increments or decrements buttons and if I use onValueChanged()
listener the text updated but scrolling became very laggy and slow( as result of updating all the time when value changed).
所以我需要帮助,如何始终显示NumberPicker的值,而不会导致NumberPicker滚动的滞后或减慢.
So I need help how to display the value of NumberPicker all the time without causing lagging or slowing of NumberPicker scrolling.
代码如下:
NumberPicker milisecoundsNumberPicker = (NumberPicker) findViewById(R.id.numberPicker);
milisecNumberPicker.setFocusable(false);
milisecNumberPicker.setFocusableInTouchMode(false);
TextView textNumber = (TextView) findViewById(R.id.selectednum);
milisecNumberPicker.setMaxValue(10);
milisecNumberPicker.setMinValue(0);
milisecNumberPicker.setWrapSelectorWheel(false);
String[] nums = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" };
milisecNumberPicker.setDisplayedValues(nums);// array of numbers
milisecNumberPicker.setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChange(NumberPicker view, int scrollState) {
if (scrollState == OnScrollListener.SCROLL_STATE_IDLE
|| scrollState == OnScrollListener.SCROLL_STATE_TOUCH_SCROLL) {
view.getValue();
textNumber.setText(view.getValue() + "");
//this is ok no lagging but will not work on pressing increments and decrements buttons
}
}
});
// If I use this
milisecNumberPicker.setOnValueChangedListener(new OnValueChangeListener() {
@Override
public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
// set Text value here causing lagging on scrolling
}
});
抱歉,格式不好,这是我的新手,但是任何人都可以帮助我解决这个问题.
Sorry bout bad formatting I'm new in this but can any one help me in this topic.
推荐答案
HI
import android.os.Handler;
......
milisecoundsNumberPicker.setOnValueChangedListener(new android.widget.NumberPicker.OnValueChangeListener() {
@Override
public void onValueChange(android.widget.NumberPicker picker, final int oldVal, final int newVal) {
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
if (newVal == milisecoundsNumberPicker.getValue()) {
textNumber.setText(newVal + "");
}
}
}, 500);//set time
}
});
这篇关于当Android中NumberPicker不只滚动(按加号或减号)时,如何从onValueChange获取NumberPicker实例的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!