【发布时间】:2020-06-18 14:47:14
【问题描述】:
我尝试实现一个由 SwitchCompat 打开的时间选择器,所以当我启用该选项时,时间选择器会显示出来,它工作正常,但如果我按下取消或返回按钮,或者只是按下外部时间选择器,开关保持在 ON 位置,当我没有在 Time Picker 中选择时间时,我希望它回到 OFF 位置。认为也许 onCancel 方法可以帮助但它没有,或者只是我在实现它时犯了一些错误,有相关代码:
public class Settings extends AppCompatActivity implements TimePickerDialog.OnTimeSetListener, TimePickerDialog.OnDismissListener, TimePickerDialog.OnCancelListener {
private EditText textLastHour;
private KeyListener keyListener;
private SwitchCompat hourSwitch;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings);
textLastHour = findViewById(R.id.finalHourText);
textLastHour.setKeyListener(null);
textLastHour.setHint("Option not selected");
hourSwitch = findViewById(R.id.switch_hour);
hourSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
DialogFragment timePicker = new TimePickerFragment();
timePicker.show(getSupportFragmentManager(), "time picker");
} else {
textLastHour.setText("");
}
}
});
}
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
textLastHour = findViewById(R.id.finalHourText);
textLastHour.setText("Final alarm at: " + hourOfDay + ":" + minute);
}
@Override
public void onCancel(DialogInterface dialog) {
hourSwitch.setChecked(false);
}
@Override
public void onDismiss(DialogInterface dialog) {
hourSwitch.setChecked(false);
}
}
onDismiss 和onCancel 我都试过了,都没有在这里工作,如果取消时间选择器,有什么解决方案可以让 Switch 回到原来的位置吗?将DatePicker 添加到标签中,因为我觉得它可能具有与TimePicker 相同的解决方案。
我的TimePickerFragment班级:
public class TimePickerFragment extends DialogFragment {
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Calendar c = Calendar.getInstance();
int hour = c.get(Calendar.HOUR_OF_DAY);
int minute = c.get(Calendar.MINUTE);
return new TimePickerDialog(getActivity(), (TimePickerDialog.OnTimeSetListener) getActivity(), hour, minute, DateFormat.is24HourFormat(getActivity()));
}
}
【问题讨论】:
-
据我所见,当用户未设置时间时,您没有取消/关闭回调。我建议创建另一个继承自 TimePickerDialog 的类,并在对话框关闭时创建另一个回调
-
我将在这里添加我的 TimePickerClass 秒,是的,我对这些方法有问题,但有点不明白如何解决它们,在互联网上找到了那些 onCancel 和 onDismiss 侦听器,但是没有一个解决方案适合我
标签: java android datepicker timepicker