在Android上以编程方式调用onValueChange(NumberPicker)

时间:2016-04-14 09:43:03

标签: android listener numberpicker

在NumberPicker中执行setValue后,可以触发onValueChange吗?

valuePicker = (NumberPicker) findViewById(R.id.valorDimNumberPicker);
    valuePicker.setMinValue(1);
    valuePicker.setMaxValue(10);

    valuePicker.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {
        @Override
        public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
            //change the world
        }
    });

 valuePicker.setValue(2);

在valuePicker.setValue(2)之后,我想自动执行onValueChange方法下的代码(改变世界)。

3 个答案:

答案 0 :(得分:0)

这是一个例子!!!

    valuePicker.setMinValue(1);
    valuePicker.setMaxValue(10);
    valuePicker.setWrapSelectorWheel(true);
    valuePicker.setValue(2);

    valuePicker.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {
    @Override
    public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
        //change the world
        if(newVal==3){
                picker.setValue(3);
            }
    }
});

答案 1 :(得分:0)

假设您要为新值求值的函数是

void toastValue(int value) {
    Toast.makeText(getApplicationContext(), String.valueOf(value), Toast.LENGTH_SHORT).show();
}

只是显示具有给定值的烤面包。 请注意,您的onValueChangeListener现在将仅使用新值调用此函数,如下所示

valuePicker.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {
        @Override
        public void onValueChange(NumberPicker numberPicker, int oldValue, int newValue) {
            toastValue(newValue);
        }
    });

然后,您可以创建在setValue(x)中调用代替的函数,该函数同时调用setValue(x)toastValue(x)。 这可能是

void setPickerIndex(NumberPicker numberPicker, int value) {
    numberPicker.setValue(value);
    toastValue(value);
}

您可以像setPickerIndex(valuePicker, value);这样使用。


请注意,使用Kotlin时,您可以创建扩展功能(以便它可以访问toastValue(x)

fun NumberPicker.setIndex(value: Int) {
    this.value = value
    toastValue(value)
}

您可以像valuePicker.setIndex(x)这样称呼它,它比setPickerIndex(valuePicker, x)更直观。

答案 2 :(得分:0)

在设置onclick()的值后,在numberpicker内重复相同的指令 在NumberPicker onValueChange()

类似这样的东西:

    final NumberPicker np = (NumberPicker)getActivity().findViewById(R.id.b_num_pick);
    if (np != null) {
        np.setMinValue(1);
        int maxValue =nmax;
        np.setMaxValue(maxValue);
        np.setWrapSelectorWheel(false);
        np.setValue(1);
        np.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {
            @Override
            public void onValueChange(NumberPicker picker, int oldVal, int newVal) {

                 //do something;
            }
        });
    }

    Button increment_ = (Button) getActivity().findViewById(R.id.b_increment);
    increment_ .setOnClickListener(new NumberPicker.OnClickListener() {
        @Override
        public void onClick(View v) {
            int oldVal,newVal;
            oldVal=np.getValue();
            newVal=oldVal+1;
            if(newVal>nmax)newVal=1;
            np.setValue(newVal);

            //do something;
        }
    });

对我来说有用。