Android日期选择器DatePickerDialog的使用

Android日期选择器DatePickerDialog的使用

2016年12月06日 11:20:18 wxx_csdn 阅读数:4553

版权声明:本文为博主原创文章,转载请注明出处 http://blog.csdn.net/wxx_csdn https://blog.csdn.net/wxx_csdn/article/details/53484818

说实话,做了这么久还是第一次用到这个日期选择器,本来还以为要自己写一个,拿到需求后已经做好自定义的准备了,一百度才发现原来原生就有,而且和我们UI设计的基本一样,而且原生的看着也是挺好看的,心想算了,不写了,先完成需求再说把。

使用真实太简单了!!!

主要说两种实现方式,道理其实是一样的,看你喜欢怎么用了

一、新建类文件

1、新建一个类 继承 DialogFragment

 

 
  1. public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {

  2. private String TAG = DatePickerFragment.class.getCanonicalName();

  3. @Override

  4. public Dialog onCreateDialog(Bundle savedInstanceState) {

  5. final Calendar calendar = Calendar.getInstance();

  6. int year = calendar.get(Calendar.YEAR);

  7. int month = calendar.get(Calendar.MONTH);

  8. int day = calendar.get(Calendar.DAY_OF_MONTH);

  9. return new DatePickerDialog(getActivity(), this, year, month, day);

  10. }

  11.  
  12. @Override

  13. public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {

  14. Log.e(TAG, "year:"+year+";monthOfYear:"+monthOfYear+";dayOfMonth:"+dayOfMonth);

  15. }

  16. }


2、在你的按钮onclick中

 

 

 
  1. DatePickerFragment datePicker = new DatePickerFragment();

  2. datePicker.show(getFragmentManager(), "DatePicker");


 

 

点击完成,看输出日记

 

E/com.xinxin.applicationtest.widget.DatePickerFragment: year:2016;monthOfYear:11;dayOfMonth:6


咦,是不是发现一个问题,12月,输出时变成11了

monthOfYear:11

 

月份在获取时,都是-1的返回,所以我们在使用时需要对月份进行+1的处理。

 

二、直接在点击的实现中,并且增加一个取消的按钮

 

 
  1. Calendar calendar = Calendar.getInstance();

  2. int year = calendar.get(Calendar.YEAR);

  3. int month = calendar.get(Calendar.MONTH);

  4. int day = calendar.get(Calendar.DAY_OF_MONTH);

  5. DatePickerDialog picker = new DatePickerDialog(MainActivity.this, DatePickerListener, year, month, day);

  6. picker.setCancelable(true);

  7. picker.setCanceledOnTouchOutside(true);

  8. picker.setButton(DialogInterface.BUTTON_POSITIVE, "确认",

  9. new DialogInterface.OnClickListener() {

  10. @Override

  11. public void onClick(DialogInterface dialog, int which) {

  12. //确定的逻辑代码

  13. }

  14. });

  15. picker.setButton(DialogInterface.BUTTON_NEGATIVE, "取消",

  16. new DialogInterface.OnClickListener() {

  17. @Override

  18. public void onClick(DialogInterface dialog, int which) {

  19. //取消什么也不用做

  20. }

  21. });

  22. picker.show();


 

 

以上基本简单的使用已经实现了

-------------------------------------------------------------------华丽丽的分割线-----------------------------------------------------------------------

但是发现一个问题,不管是点击取消,还是确定,都会执行接口的回调,我们的设计是在点击取消的时候不获取时间,那要怎么实现呢?

修改上面的代码,把

DatePickerListener

的实现设置为null,日期我们在确定的回调中实现,看代码

 

 
  1. Calendar calendar = Calendar.getInstance();

  2. final DatePickerDialog datePicker = new DatePickerDialog(mContext, null,

  3. calendar.get(Calendar.YEAR),

  4. calendar.get(Calendar.MONTH),

  5. calendar.get(Calendar.DAY_OF_MONTH));

  6. datePicker.setCancelable(true);

  7. datePicker.setCanceledOnTouchOutside(true);

  8. datePicker.setButton(DialogInterface.BUTTON_POSITIVE, "确认",

  9. new DialogInterface.OnClickListener() {

  10. @Override

  11. public void onClick(DialogInterface dialog, int which) {

  12. //确定的逻辑代码在监听中实现

  13. DatePicker picker = datePicker.getDatePicker();

  14. int year = picker.getYear();

  15. int monthOfYear = picker.getMonth();

  16. int dayOfMonth = picker.getDayOfMonth();

  17. }

  18. });

  19. datePicker.setButton(DialogInterface.BUTTON_NEGATIVE, "取消",

  20. new DialogInterface.OnClickListener() {

  21. @Override

  22. public void onClick(DialogInterface dialog, int which) {

  23. //取消什么也不用做

  24. }

  25. });


确定的onClick的回调中,通过获取DatePicker来获取点击设置的日期,就这样,取消不会触发任何操作。

 

收工

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值