可以在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方法下的代码(更改世界)。
这是一个例子!
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);
}
}
});
假设您要为新值求值的函数是
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)
更直观。