Я пытался реализовать Time Picker, который открывается SwitchCompat, поэтому, когда я включаю опцию, Time Picker появляется, он работает нормально, но если я нажимаю кнопку отмены, или кнопку назад, или просто нажимаю за пределами переключатель времени остается в положении ON, и я хочу, чтобы он снова переключился в положение OFF, если я не выбрал время в Time Picker. Подумал, что, возможно, метод 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 go в исходное положение, если вы отмените Time Picker? Добавил DatePicker
к тегам, так как я чувствую, что у этой проблемы может быть то же решение, что и TimePicker
.
My 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()));
}
}