Android日期选择器DatePickerDialog的使用

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

使用真实太简单了!!!

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

一、新建类文件

1、新建一个类 继承 DialogFragment

public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {
    private String TAG = DatePickerFragment.class.getCanonicalName();
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        final Calendar calendar = Calendar.getInstance();
        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH);
        int day = calendar.get(Calendar.DAY_OF_MONTH);
        return new DatePickerDialog(getActivity(), this, year, month, day);
    }

    @Override
    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
        Log.e(TAG, "year:"+year+";monthOfYear:"+monthOfYear+";dayOfMonth:"+dayOfMonth);
    }
}

2、在你的按钮onclick中

DatePickerFragment datePicker = new DatePickerFragment();
            datePicker.show(getFragmentManager(), "DatePicker");


点击完成,看输出日记

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

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

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


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

Calendar calendar = Calendar.getInstance();
            int year = calendar.get(Calendar.YEAR);
            int month = calendar.get(Calendar.MONTH);
            int day = calendar.get(Calendar.DAY_OF_MONTH);
            DatePickerDialog picker = new DatePickerDialog(MainActivity.this, DatePickerListener, year, month, day);
            picker.setCancelable(true);
            picker.setCanceledOnTouchOutside(true);
            picker.setButton(DialogInterface.BUTTON_POSITIVE, "确认",
                    new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            //确定的逻辑代码
                        }
                    });
            picker.setButton(DialogInterface.BUTTON_NEGATIVE, "取消",
                    new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            //取消什么也不用做
                        }
                    });
            picker.show();



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

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

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

修改上面的代码,把

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

Calendar calendar = Calendar.getInstance();
        final DatePickerDialog datePicker = new DatePickerDialog(mContext, null,
                calendar.get(Calendar.YEAR),
                calendar.get(Calendar.MONTH),
                calendar.get(Calendar.DAY_OF_MONTH));
        datePicker.setCancelable(true);
        datePicker.setCanceledOnTouchOutside(true);
        datePicker.setButton(DialogInterface.BUTTON_POSITIVE, "确认",
                new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        //确定的逻辑代码在监听中实现
                        DatePicker picker = datePicker.getDatePicker();
                        int year = picker.getYear();
                        int monthOfYear = picker.getMonth();
                        int dayOfMonth = picker.getDayOfMonth();
                    }
                });
        datePicker.setButton(DialogInterface.BUTTON_NEGATIVE, "取消",
                new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        //取消什么也不用做
                    }
                });

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


收工


【更多开发实用技术请点击】

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值