Android的NumberPicker OnValueChangeListener(Android

2019-09-03 17:49发布

我有一个关于Android的问题NumberPicker 。 当用户在执行一扔NumberPicker ,对每一个步骤为监听OnValueChange被触发。 我能以这种方式改变这种情况,该OLDVAL和的newval都不可能超过1互不相同且监听时,才会触发一次?

提前致谢。

编辑:我会尽量解释它在我的代码更加具体。

        int diff = Math.abs(newVal - oldVal);

        if (newVal - oldVal > 0) {
            sendMessage(te);
            for (int i = 0; i < diff; i++) {
                sendMessage(plus);
            }
            sendMessage(te);
        } else if (newVal - oldVal < 0) {
            sendMessage(te);
            for (int i = 0; i < diff; i++) {
                sendMessage(minus);
            }
            sendMessage(te);
        } else {
            if (D)
                Log.w(TAG, "This should NEVER happen");
        }

这种方法被称为inonValueChange。 它发送消息太快我的连接设备中的时间作出反应。 所以,我需要以任何方式减缓下来。 有没有人有一个想法如何慢,没有让我的主线程睡眠? 当它处于睡眠状态,整个GUI是在此期间不响应。 我尽量避免这种情况。

谢谢。

Answer 1:

取而代之的setOnValueChangedListener可以使用setOnScrollListener ,并让您的选择器的值,当滚动状态SCROLL_STATE_IDLE 。 检查这个例子:

    numberPicker.setOnScrollListener(new NumberPicker.OnScrollListener() {

        private int oldValue;  //You need to init this value.

        @Override
        public void onScrollStateChange(NumberPicker numberPicker, int scrollState) {
            if (scrollState == NumberPicker.OnScrollListener.SCROLL_STATE_IDLE) {
                //We get the different between oldValue and the new value
                int valueDiff = numberPicker.getValue() - oldValue;

                //Update oldValue to the new value for the next scroll
                oldValue = numberPicker.getValue();

                //Do action with valueDiff
            }
        }
    });

请注意,您需要初始化该值oldValue听者变量。 如果你需要创建一个通用监听器(可接收值的任何数组),您可以创建一个实现自定义类NumberPicker.OnScrollListener和接收在构造函数中的初始值。 事情是这样的:

    public class MyNumberPickerScrollListener implements NumberPicker.OnScrollListener {

        private int oldValue;

        public MyNumberPickerScrollListener(int initialValue) {
            oldValue = initialValue;
        }

        @Override
        public void onScrollStateChange(NumberPicker numberPicker, int scrollState) {
            if (scrollState == NumberPicker.OnScrollListener.SCROLL_STATE_IDLE) {
                //We get the different between oldValue and the new value
                int valueDiff = numberPicker.getValue() - oldValue;

                //Update oldValue to the new value for the next scroll
                oldValue = numberPicker.getValue();

                //Do action with valueDiff
            }
        }
    }

阅读NumberPicker.onScrollListener以获取更多信息的文档。



文章来源: Android NumberPicker OnValueChangeListener