【问题标题】:NumberPicker value not getting if entered custom input number如果输入自定义输入数字,NumberPicker 值不会得到
【发布时间】:2021-06-30 10:10:20
【问题描述】:
我在 Dialog 中使用了 Material NumberPicker,我在打开对话框时遇到了一个问题,用户可以在 NumberPicker 中手动输入任何数字(从 1 到 10)并从 Dialog 中按下“确定”按钮然后没有获取在NumberPicker 中输入的正确值,但如果在 1 到 10 之间滚动并按下“确定”按钮,它将返回正确的值。
[
【问题讨论】:
标签:
android
material-design
android-number-picker
【解决方案1】:
我有同样的问题,你可以检查下面的代码的代码
numberPicker是Dialog中使用的组件
EditText mInputText = binding.numberPicker.findViewById(Resources.getSystem().getIdentifier("numberpicker_input","id","android"));
然后你会在里面有 OK 点击监听器,你可以像下面这样编写代码
if (mInputText != null){
int count = Integer.parseInt(mInputText.getText().toString());
mBinding.tvDisplayAntalCount.setText(String.valueOf(count));
}
【解决方案2】:
NumberPickerDialog
public class NumberPickerDialog extends DialogFragment {
private NumberPicker.OnValueChangeListener valueChangeListener;
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
NumberPicker numberPicker = new NumberPicker(getActivity());
numberPicker.setMinValue(1);
numberPicker.setMaxValue(10);
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("Default NumberPicker");
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
valueChangeListener.onValueChange(numberPicker,
numberPicker.getValue(), numberPicker.getValue());
}
});
builder.setNegativeButton("CANCEL", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
valueChangeListener.onValueChange(numberPicker,
numberPicker.getValue(), numberPicker.getValue());
}
});
builder.setView(numberPicker);
return builder.create();
}
public NumberPicker.OnValueChangeListener getValueChangeListener() {
return valueChangeListener;
}
public void setValueChangeListener(NumberPicker.OnValueChangeListener valueChangeListener) {
this.valueChangeListener = valueChangeListener;
}
}
MainActivity
public class MainActivity extends AppCompatActivity implements NumberPicker.OnValueChangeListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.numberpicker);
}
@Override
public void onValueChange(NumberPicker numberPicker, int i, int i1) {
Toast.makeText(this,
"selected number " + numberPicker.getValue(), Toast.LENGTH_SHORT).show();
}
public void showNumberPicker(View view){
NumberPickerDialog newFragment = new NumberPickerDialog();
newFragment.setValueChangeListener(this);
newFragment.show(getSupportFragmentManager(), "time picker");
}
}