Код TimePickerFragment всегда устанавливает одно и то же время (Android)
Я пытаюсь установить будильник для следующего события (по существу, в течение следующих 24 часов). Для этого я определил TimePickerFragment
для использования в нескольких мероприятиях, которые реализуют TimePickerDialog.OnTimeSetListener
,
Мне нужно не только создать правильное время будильника (alarm
) из TimePicker
, но я также хочу отображать время в TextView
(timeText
). Проблема в том, что всякий раз, когда время установлено пользователем, timeText
меняется на 22:12 каждый раз, независимо от того, когда он установлен или на что он установлен. Я могу только представить, что что-то не переносится должным образом, но я не могу понять, что.
Это полнота TimePickerFragment
:
public class TimePickerFragment extends DialogFragment {
int hour, minute;
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// use the current time as the default values for the picker
Calendar c = Calendar.getInstance();
hour = c.get(Calendar.HOUR_OF_DAY);
minute = c.get(Calendar.MINUTE);
// Create a new instance of TimePickerDialog and return it
return new TimePickerDialog(getActivity(), (TimePickerDialog.OnTimeSetListener)getActivity(), hour, minute, DateFormat.is24HourFormat(getActivity()));
}
}
А вот соответствующий код из одного из классов реализации:
public void showTimePickerDialog(View v) {
DialogFragment newFragment = new TimePickerFragment();
newFragment.show(getFragmentManager(), "timePicker");
}
public void onTimeSet(TimePicker view, int hour, int minute) {
alarm = new GregorianCalendar();
alarm.set(Calendar.HOUR_OF_DAY,hour);
alarm.set(Calendar.MINUTE,minute);
alarm.set(Calendar.SECOND,0);
if(alarm.getTimeInMillis()<=Calendar.getInstance().getTimeInMillis()) { alarm.add(Calendar.DATE,1); }
//timeText.setText(String.valueOf(alarm.get(Calendar.AM_PM)));
showAlarm();
}
private void showAlarm() {
String ampm;
if(alarm.AM_PM==0) {ampm="AM";}
else{ampm="PM";}
timeText.setText(alarm.HOUR+":"+alarm.MINUTE+" "+ampm);
}
Я не уверен, что это полезно, но всякий раз, когда я нажимаю кнопку, чтобы открыть TimePicker, а также когда я устанавливаю время из него, это регистрируется:E/ViewRootImpl﹕ sendUserActionEvent() mView == null
Это только приводит меня к мысли, что я что-то упустил по пути.
Этот код претерпел много изменений, но он никогда не работал должным образом и в лучшем случае всегда приводил к результату "10:12 PM".
1 ответ
Это была простая и, возможно, глупая ошибка, но я наконец понял это.
Android Studio не возражала против использования мной alarm.HOUR
чтобы получить переменную, но это было неправильно.
Проще говоря, я должен был использовать alarm.get(Calendar.HOUR)
вместо alarm.HOUR
,