Android学习笔记:设置日期和时间不能选择当前时刻以前的日期时间的解决办法

来源:互联网 发布:阿里云 api市场 编辑:程序博客网 时间:2024/05/21 08:00

根据业务需求,需要实现如题的功能,细想一下,其中包含很多细节,如下:

1,如果设置年大于当前的年,那么月,日,时间可以随便设置;

2,如果设置年小于当前的年,那么则设置不能成功;

3,如果设置年等于当前的年,那么如果设置月大于当前的月,那么日,时间可以随便设置;

4,如果设置年等于当前的年,那么如果设置月小于当前的月,那么则设置不能成功;

5,如果设置年等于当前的年,那么如果设置月等于当前的月,那么如果设置日大于当前的日,则时间可以随便设置;

。。。。。。

等等

在android中,关于日期和时间,我们首先想到的便是DatePicker和TimePicker两个组件,接下来便是实现方式的问题,该如何实现呢?我本来设想的是用DatePickerDialog和TimePickerDialog,然后通过判断来决定DatePicker中的按钮是否可按,比如,设置年的值如果要小于当前的年的时候,则DatePicker中的“-”按钮则是不可按的。这种方式实现起来比较的麻烦,而且源码里面有些东西也没看懂,就自己做了个类似DatePickerDialog的组件,如下图:

今日是6号,“-”按钮是没有反映的,点击一下则变成了灰色,按照上面的业务一步一步的分析,则可以实现,不难,但是很烦琐特别是布局,最讨厌的就是调整布局,所以就把这些逻辑还是放到原有的DatePicker上来实现。当然实现的界面可能就没有这么直观了。

  

                                          1                                                                                                                 2

  

                                                  3                                                                                                          4

  

                                                5                                                                                                             6


                                                     7


可能感觉有点坑爹,但是还是将就吧。

看看关键的代码:

 @Overrideprotected Dialog onCreateDialog(int id) {Dialog dialog = null;switch (id) {case R.id.wait_edit_yuyuedata: DatePickerDialog.OnDateSetListener dateListener = new DatePickerDialog.OnDateSetListener() {                  @Override                  public void onDateSet(DatePicker datePicker,int year, int month, int dayOfMonth) {                  Log.i(TAG,"onDateSet----------->year:"+year+",month:"+(month+1)+",day:"+dayOfMonth);                 if(year>getYear()){//设置年大于当前年,直接设置,不用判断下面的                 wait_edit_yuyuedata.setText(dayOfMonth + "/"+(month+1)+"/"+year);                 flag = 1;                 }else if(year == getYear()){//设置年等于当前年,则向下开始判断月                 if((month+1) > getMonth()){//设置月等于当前月,直接设置,不用判断下面的                 flag = 1;                 wait_edit_yuyuedata.setText(dayOfMonth + "/"+(month+1)+"/"+year);                 }else if((month+1) == getMonth()){//设置月等于当前月,则向下开始判断日                 if(dayOfMonth > getDay()){//设置日大于当前月,直接设置,不用判断下面的                 flag = 1;                     wait_edit_yuyuedata.setText(dayOfMonth + "/"+(month+1)+"/"+year);                 }else if(dayOfMonth == getDay()){//设置日等于当前日,则向下开始判断时                 flag = 2;                     wait_edit_yuyuedata.setText(dayOfMonth + "/"+(month+1)+"/"+year);                 }else{//设置日小于当前日,提示重新设置                 flag = 3;                 Toast.makeText(MainActivity.this, "当前日不能小于今日,请重新设置", 2000).show();                 }                 }else{//设置月小于当前月,提示重新设置                 flag = 3;                 Toast.makeText(MainActivity.this, "当前月不能小于今月,请重新设置", 2000).show();                 }                 }else{//设置年小于当前年,提示重新设置                 flag = 3;                 Toast.makeText(MainActivity.this, "当前年不能小于今年,请重新设置", 2000).show();                 }                                  if(flag == 3){                 datePicker.init(getYear(), (getMonth()-1), getDay(), new DatePicker.OnDateChangedListener() {@Overridepublic void onDateChanged(DatePicker view, int year, int monthOfYear,int dayOfMonth) {wait_edit_yuyuedata.setText(dayOfMonth + "/"+(monthOfYear+1)+"/"+year);}});                 }                 }              };          dialog = new DatePickerDialog(this, dateListener, getYear(), (getMonth()-1), getDay());              break;case R.id.wait_edit_arriveltime:TimePickerDialog.OnTimeSetListener timeListener = new TimePickerDialog.OnTimeSetListener() {@Overridepublic void onTimeSet(TimePicker view, int hourOfDay, int minute) {Log.i(TAG,"onTimeSet----------->flag:"+flag+",hourOfDay:"+hourOfDay+",minute:"+minute);switch (flag) {case 1://设置日期在当前日期之后,直接设置时间,不用判断wait_edit_arriveltime.setText(hourOfDay+":"+minute);break;case 2://设置日期等于当前日期之后,判断时和分if(hourOfDay>getHonor()){wait_edit_arriveltime.setText(hourOfDay+":"+minute);}else if(hourOfDay == getHonor()){if(minute>getMin()){wait_edit_arriveltime.setText(hourOfDay+":"+minute);}else{wait_edit_arriveltime.setText(getHonor()+":"+getMin());Toast.makeText(MainActivity.this, "请选择大于现在时刻的分钟", 2000).show();}}else{wait_edit_arriveltime.setText(getHonor()+":"+getMin());Toast.makeText(MainActivity.this, "请选择大于现在时刻的小时", 2000).show();}break;case 3://设置日期等于当前日期之前,提示日期还未设置正确,不能设置时间wait_edit_arriveltime.setText(getHonor()+":"+getMin());Toast.makeText(MainActivity.this, "请先设置正确的日期", 2000).show();break;default:break;}}};Log.i(TAG,"init----------->flag:"+flag+",hourOfDay:"+getHonor()+",minute:"+getMin());dialog = new TimePickerDialog(this, timeListener, getHonor(),getMin(), true);break;case 1:AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);builder.setTitle("您要确定放弃编辑吗?");builder.setPositiveButton("确定",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface arg0, int arg1) {MainActivity.this.finish();}});builder.setNegativeButton("取消",new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog,int whichButton) {}});builder.show();break;default:break;}return dialog;}

具体的代码,请点击下载:1:http://download.csdn.net/detail/duancanmeng/4480117  2:http://download.csdn.net/detail/duancanmeng/4480126

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 开车久了肩膀疼怎么办 3岁宝宝撕书怎么办 孩子上幼儿园不爱写字怎么办 一年级小孩不爱做作业怎么办 小孩不愿多做作业怎么办 小孩一年级不自觉做作业怎么办 小孩会读不会写怎么办 好多字都不会写怎么办 写作业怎么办才能写快 五周宝宝爱玩不写字怎么办 爱玩手机的小孩怎么办? 一年级学生记不住生字怎么办 一年级小孩记不住生字怎么办 配镜度数高了怎么办 宝宝两岁半不肯坐马桶拉臭臭怎么办 儿子字写得不好 怎么办 小孩不听话不爱读书和写字怎么办 两岁宝宝不愿意穿衣服怎么办 做题粗心不认真怎么办 5岁宝宝不会写字怎么办 四岁宝宝不会写字怎么办 4岁宝宝不写字怎么办 四岁宝宝不写字怎么办 孩子学习粗心计算能力差怎么办 一年级的小朋友不爱看书怎么办 马上要生了害怕怎么办 孩子做题不爱读题怎么办 孩子作业写的慢怎么办 孩子学习不好怎么办我们有绝招 英语不会做题怎么办呢? 小学二年级孩子厌学怎么办 狗狗拉肚子不吃东西怎么办 小孩做作业时容易发呆怎么办 一上高速就犯困怎么办 孩子初中数学学不好怎么办 高三注意力不集中怎么办 考砸了家长打我怎么办? 高三学生困疲劳怎么办 高三晚上很困怎么办 孩子上高三压力大不想上学怎么办 高三的孩子压力大怎么办