TimePickerFragment代码始终设置相同的时间(Android)

时间:2015-04-25 03:17:06

标签: android timepicker android-timepicker

我正在尝试为下次出现的时间设置闹钟(基本上是在接下来的24小时内)。为此,我定义了一个TimePickerFragment,用于实现TimePickerDialog.OnTimeSetListener的多个活动。

我不仅需要从alarm创建正确的闹钟时间(TimePicker),还要在TextViewtimeText)中显示时间。问题在于,无论何时用户设置时间,timeText每次更改为10:12 PM,无论何时设置或设置为何。我只能想象某些事情没有被正确地延续,但我无法弄清楚是什么。

这是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 个答案:

答案 0 :(得分:0)

这是一个简单而且可能是愚蠢的错误,但我终于明白了。 Android Studio并不介意我使用alarm.HOUR来获取变量,但这是错误的。

简单地说,我应该使用alarm.get(Calendar.HOUR)代替alarm.HOUR