我正在尝试为下次出现的时间设置闹钟(基本上是在接下来的24小时内)。为此,我定义了一个TimePickerFragment
,用于实现TimePickerDialog.OnTimeSetListener
的多个活动。
我不仅需要从alarm
创建正确的闹钟时间(TimePicker
),还要在TextView
(timeText
)中显示时间。问题在于,无论何时用户设置时间,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”的结果。
答案 0 :(得分:0)
这是一个简单而且可能是愚蠢的错误,但我终于明白了。
Android Studio并不介意我使用alarm.HOUR
来获取变量,但这是错误的。
简单地说,我应该使用alarm.get(Calendar.HOUR)
代替alarm.HOUR
。