TimePickerDialog和DatePickerDialog使用及问题解决
2016-04-16 00:35
543 查看
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);ButterKnife.bind(this);calendar = Calendar.getInstance();mYear = calendar.get(Calendar.YEAR);mMonthOfYear = calendar.get(Calendar.MONTH);mDayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);hourOfDay = calendar.get(Calendar.HOUR_OF_DAY);minute = calendar.get(Calendar.MINUTE);date.setText(mYear + "-" + (mMonthOfYear + 1) + "-" + mDayOfMonth);time.setText(hourOfDay + ":" + minute);}
/*** 实例化一个DatePickerDialog的对象* 第二个参数是一个DatePickerDialog.OnDateSetListener匿名内部类,当用户选择好日期点击done会调用里面的onDateSet方法*/private void showDateDialog() {DatePickerDialog datePickerDialog = new DatePickerDialog(AddMeetingActivity.this, new DatePickerDialog.OnDateSetListener() {@Overridepublic void onDateSet(DatePicker view, int year, int monthOfYear,int dayOfMonth) {date.setText(year + "-" + (monthOfYear + 1) + "-" + dayOfMonth);mYear = year;mMonthOfYear = monthOfYear;mDayOfMonth = dayOfMonth;calendar.set(year, monthOfYear, dayOfMonth);checkDate();}}, mYear, mMonthOfYear, mDayOfMonth);datePickerDialog.show();}
/*** 实例化一个TimePickerDialog的对象* 第二个参数是一个TimePickerDialog.OnTimeSetListener匿名内部类,当用户选择好时间后点击done会调用里面的onTimeset方法*/private void showTimeDialog() {TimePickerDialog timePickerDialog = new TimePickerDialog(AddMeetingActivity.this, new TimePickerDialog.OnTimeSetListener() {@Overridepublic void onTimeSet(TimePicker view, int hourOfDay, int minute) {time.setText(hourOfDay + ":" + minute);calendar.setTimeInMillis(System.currentTimeMillis());calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);calendar.set(Calendar.MINUTE, minute);calendar.set(Calendar.SECOND, 0); // 设为 0calendar.set(Calendar.MILLISECOND, 0); // 设为 0calendar.set(mYear, mMonthOfYear, mDayOfMonth);checkDate();}}, hourOfDay, minute, true);timePickerDialog.show();}
/*** 检查日期是否符合*/private void checkDate() {Calendar now = Calendar.getInstance();LogUtil.Log("date", "now=" + now.getTime());LogUtil.Log("date", "set=" + calendar.getTime());if (now.after(calendar)) {Snackbar.make(subject, "会议时间早于当前时间!", Snackbar.LENGTH_LONG).show();checkDate = false;} else {checkDate = true;}}以上为正确代码.我在做这个时遇到一个问题,就是检查时间符合时
checkDate()如果先点的日期后点的时间选择,calendar的日期总会被重置为当前日期.
calendar.setTimeInMillis(System.currentTimeMillis());calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);calendar.set(Calendar.MINUTE, minute);calendar.set(Calendar.SECOND, 0); // 设为 0calendar.set(Calendar.MILLISECOND, 0); // 设为 0calendar.set(mYear, mMonthOfYear, mDayOfMonth);正确的做法就是设置好时间后,对calendar重新设置年月日,并且要注意的是,必须按照上面的顺序设定!否则年月日还是会被重置为当前日期!
相关文章推荐
- MSSQL 构建日期范围内的连续月份或日期(不借助系统表的方法)
- linux 防火墙设置(摘自网络)
- Redis学习二
- Flume的可靠性保证:故障转移、负载均衡
- codevs 1078 最小生成树 kruskal
- VijosP1180:选课
- IntelliJ IDEA 使用心得与常用快捷键
- java并发的线程安全单例模式
- Hibernate学习总结:OneToOne双向外键关联
- Error:Configuration with name 'default' not found. 解决办法
- [POJ 3276] Face The Right Way (翻转问题+技巧)
- 实例26直接交换两个数的值
- (LeetCode 191) Number of 1 Bits
- 用Python3下载网页图片
- CLM研究
- 【皇甫】☀内侧小解析---小行动(1)
- 安装.NET Framework进度条卡住不动的解决方案
- HDU 4622 Reincarnation 后缀自动机
- Intent详解
- activity与fragment通信汇总