Код 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,

Другие вопросы по тегам