【问题标题】:How to get value of the NumberPicker instance from onValueChange when The NumberPicker not scrolling only(pressing plus or minus buttons) in Android如何在 Android 中的 NumberPicker 仅不滚动(按加号或减号按钮)时从 onValueChange 获取 NumberPicker 实例的值
【发布时间】:2016-06-11 01:59:46
【问题描述】:

我有一个 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                                                             
        }
    });

抱歉,格式不正确,我是新来的,但任何人都可以在这个主题上帮助我。

【问题讨论】:

    标签: android scroll numberpicker getvalue android-number-picker


    【解决方案1】:

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

    【讨论】:

    • 我以相同的解决方案结束...这也是我提出的最佳方法。
    猜你喜欢
    • 2013-09-04
    • 2013-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-18
    • 2016-04-20
    • 2014-05-19
    • 1970-01-01
    相关资源
    最近更新 更多