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 实例,它按预期工作,但我需要在滚动停止时或当用户仅按下递增/递减按钮时从它获取值。 我应该得到的值显示在文本视图中。

我设法在滚动停止/空闲并正确显示时获取值(这在 onScrollChanged() 侦听器中完成)。

但是当用户按下递增或递减按钮时 onScrollChanged() 侦听器不会被触发,如果我使用 onValueChanged() 侦听器文本更新但滚动变得非常滞后和缓慢(由于值更改时一直更新)。

所以我需要帮助如何始终显示 NumberPicker 的值而不导致 NumberPicker 滚动滞后或变慢。

代码如下:

    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                                                             
        }
    });

抱歉格式不正确我是新手,但任何人都可以帮助我解决这个问题。

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 
        }
    });