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
-
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来获取点击设置的日期,就这样,取消不会触发任何操作。
收工