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

问题描述 投票:2回答:2

可以在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方法下的代码(更改世界)。

android listener numberpicker
2个回答
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);
            }
    }
});

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)更直观。

© www.soinside.com 2019 - 2024. All rights reserved.