2015-04-25 3 views
0

Я пытаюсь установить будильник для следующего появления времени (по существу, в течение следующих 24 часов). Для этого я определил TimePickerFragment, который будет использоваться в нескольких действиях, которые реализуют TimePickerDialog.OnTimeSetListener.Код TimePickerFragment всегда устанавливает одно и то же время (Android)

не только нужно, чтобы создать правильное время срабатывания будильника (alarm) из TimePicker, но я также хочу, чтобы отобразить время в TextView (timeText). Проблема в том, что всякий раз, когда пользователь задает время, timeText каждый раз изменяется на 10: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».

+0

Как я нашел из этого ответа, вам нужно реализовать слушателя, проверьте этот ответ http://www.ciiycode.com/7ymy6BWQUeUe/android-set-text-for-textview-in-listview-from-dialogfragment – Yurets

+0

Моя деятельность реализует слушателя вместо фрагмента, потому что именно там работа выполняется в это время. Это вызывает какую-то проблему, или я пропустил что-то еще? – Zircon

+0

С 'активностью' это нормально, не обязательно использовать' фрагмент'. – Yurets

ответ

0

Это была простая и, возможно, глупая ошибка, но я, наконец, понял это. Android Studio не возражал против использования alarm.HOUR, чтобы получить переменную, но это было неправильно.

Проще говоря, я должен был использовать alarm.get(Calendar.HOUR) вместо alarm.HOUR.