NumberPicker.getValue () in SCROLL_STATE_IDLE, may not be the last updated value

I use the function below to determine the last final value when the user selects a scroll on the NumberPicker. Then getValue () will update the last value.

    numberPicker.setOnScrollListener(new NumberPicker.OnScrollListener() {

        @Override
        public void onScrollStateChange(NumberPicker numberPicker, int scrollState) {
            if (scrollState == NumberPicker.OnScrollListener.SCROLL_STATE_IDLE) {
                int value = numberPicker.getValue();
            }
        }
    });

However, then I discovered that in the case where the end of the scroll is not at a certain position of the value, but between two values ​​(for example, between 1 and 2, but a little closer to 2), after releasing the scroll, the function trigger captures getValue as 1, but scrolling will automatically end its scrolling for centralization to 2. Therefore, the last updated NumberPicker value is then set to 2 (not 1, i.e. as it was fixed in my function above).

NumberPicker? , , NumberPicker ( )?

FYI. - setOnValueChangedListener. , , NumberPicker .

!

+4
1

, OnValueChange OnScrollListener NumberPicker. , . . onValueChangeListener , - . . :

public class MainActivity extends AppCompatActivity {

    private NumberPicker np;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        np = (NumberPicker) findViewById(R.id.picker);
        PickerListener listener = new PickerListener();
        np.setOnScrollListener(listener);
        np.setOnValueChangedListener(listener);
    }

    private void update(){
        //your code here
    }

    private class PickerListener implements NumberPicker.OnScrollListener, NumberPicker.OnValueChangeListener {
        private int scrollState=0;
        @Override
        public void onScrollStateChange(NumberPicker view, int scrollState) {
            this.scrollState=scrollState;
            if (scrollState==SCROLL_STATE_IDLE){
                update();
            }
        }
        @Override
        public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
            if (scrollState==0){
                update();
            }
        }
    }
+3

All Articles