查看了API,不管是取消还是确定,其点击事件都会进入到tryNotifyDateSet().则onDateSet()方法里。
测试时发现有些手机在进行取消操作时日期也会选定了。。。所以为了解决取消时不选择日期,自定义日期选择器MyDatePickerDialog,继承DatePickerDialog,重写onStop()方法。注释掉里面的父类方法,父类的onStop()里也是调用tryNotifyDateSet()方法的。屏蔽掉后就能得到所要的了
我把这个日期弹窗抽取出来做公共类,可以在任何界面调用
首先写一个接口,用来回调所选择的日期
public interface DateDialogCallBack {
public void getDate(String date);
}
创建一个公共类,在里面写个日期弹窗的方法,日期以20015-09-12的形式记录下来用接口回调,每次调用此方法时只要传context,弹窗的title,还有接口就行了
public class CommonUtils{
/**
*
* @param context
* @param titleText
* 弹窗的标题
* @param callBack
* 回调接口,所需要的数据做调用
*/
public static void showAddDateDialog(Context context, String titleText,
final DateDialogCallBack callBack) {
final Calendar c = Calendar.getInstance();
MyDatePickerDialog dialog = new MyDatePickerDialog(context,
new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year,
int monthOfYear, int dayOfMonth) {
c.set(year, monthOfYear, dayOfMonth);
String date = (String) DateFormat.format("yyyy-MM-dd",
c);
callBack.getDate(date);
}
}, c.get(Calendar.YEAR), c.get(Calendar.MONTH),
c.get(Calendar.DAY_OF_MONTH));
dialog.setTitle(titleText);
dialog.setButton(DialogInterface.BUTTON_NEGATIVE, "取消",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
dialog.setButton(DialogInterface.BUTTON_POSITIVE, "确定", dialog);
dialog.setOnKeyListener(new DialogInterface.OnKeyListener() {
@Override
public boolean onKey(DialogInterface dialog, int keyCode,
KeyEvent event) {
return true;
}
});
dialog.show();
}
}