如何在Android

时间:2016-02-27 21:30:16

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

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

对不起发布错误的格式我是新的,但是任何人都可以帮助我解决这个问题。

1 个答案:

答案 0 :(得分:1)

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