TimePickerFragment 代码始终设置相同的时间 (Android)
TimePickerFragment code always sets the same time (Android)
我正在尝试为下一次出现的时间设置闹钟(基本上是在接下来的 24 小时内)。为此,我定义了一个 TimePickerFragment
用于实现 TimePickerDialog.OnTimeSetListener
.
的多个活动
我不仅需要从 TimePicker
创建正确的闹钟时间 (alarm
),而且我还想在 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”结果。
这是一个简单的,也许是愚蠢的错误,但我终于想通了。
Android Studio 不介意我使用 alarm.HOUR
获取变量,但这是错误的。
简而言之,我应该使用 alarm.get(Calendar.HOUR)
而不是 alarm.HOUR
。
我正在尝试为下一次出现的时间设置闹钟(基本上是在接下来的 24 小时内)。为此,我定义了一个 TimePickerFragment
用于实现 TimePickerDialog.OnTimeSetListener
.
我不仅需要从 TimePicker
创建正确的闹钟时间 (alarm
),而且我还想在 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”结果。
这是一个简单的,也许是愚蠢的错误,但我终于想通了。
Android Studio 不介意我使用 alarm.HOUR
获取变量,但这是错误的。
简而言之,我应该使用 alarm.get(Calendar.HOUR)
而不是 alarm.HOUR
。