TimePickerDialog和DatePickerDialog使用及问题解决

来源:互联网 发布:剑灵女帝捏脸数据 编辑:程序博客网 时间:2024/05/16 02:36
 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() {            @Override            public 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() {            @Override            public 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); // 设为 0                calendar.set(Calendar.MILLISECOND, 0); // 设为 0                calendar.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); // 设为 0                calendar.set(Calendar.MILLISECOND, 0); // 设为 0                calendar.set(mYear, mMonthOfYear, mDayOfMonth);
正确的做法就是设置好时间后,对calendar重新设置年月日,并且要注意的是,

必须按照上面的顺序设定!否则年月日还是会被重置为当前日期!



0 0
原创粉丝点击