標籤:
(一)在Android 4.0以上系統的某些手機(如本人的測試機紅米Note(系統4.4.4),以及模擬器(系統4.0)),使用如下代碼建立時間選取器時,頁面效果
Calendar cal = Calendar.getInstance();DatePickerDialog dialog =new DatePickerDialog(this,new DatePickerDialog.OnDateSetListener(){ @Override publicvoid onDateSet(DatePicker view,int year,int monthOfYear,int dayOfMonth){ System.out.println("onDateSet~~onDateSet~~"); }}, cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH));
問題來了,對話方塊上沒有“取消”按鈕!而且,即使通過返回鍵或者點擊空白地區關閉了對話方塊,onDateSet方法依然會被回調,也就是上述代碼中的onDateSet~~onDateSet~~這個log依然會輸出!
仔細測試後會發現,點擊返回鍵或者空白地區以關閉對話方塊時,onDateSet會被回調一次;點擊“完成”按鈕時,onDateSet會被回調兩次。奇葩!!!
後來又測試發現,這段代碼在基於android 5.0的CM系統上是沒有問題的:對話方塊上面有“完成”按鈕和“取消”按鈕,點擊“完成”時onDateSet被回調一次,點擊“取消”時onDateSet不會被回調。這才是最好的效果!
(二)其實,想在對話方塊上加一個取消按鈕很簡單,加上如下代碼即可:
dialog.setButton(DialogInterface.BUTTON_NEGATIVE,"取消",new DialogInterface.OnClickListener(){ @Override publicvoid onClick(DialogInterface dialog,int which){ System.out.println("cancel~~cancel~~"); }});
然後:
但是,問題並沒有解決。因為即使點擊取消按鈕,onDateSet方法依然會被回調。也就是說,點擊“取消”、點擊手機返回鍵、點擊空白地區這3種操作的結果是一樣的!
(三)解決方案:
很簡單,不使用OnDateSetListener,而直接手動設定“完成”按鈕和“取消”按鈕的事件。完整代碼如下:
publicvoid pickDate(View view){ Calendar cal = Calendar.getInstance(); final DatePickerDialog mDialog =new DatePickerDialog(this,null, cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH)); //手動設定按鈕 mDialog.setButton(DialogInterface.BUTTON_POSITIVE,"完成",new DialogInterface.OnClickListener(){ @Override publicvoid onClick(DialogInterface dialog,int which){ //通過mDialog.getDatePicker()獲得dialog上的DatePicker組件,然後可以擷取日期資訊 DatePicker datePicker = mDialog.getDatePicker(); int year = datePicker.getYear(); int month = datePicker.getMonth(); int day = datePicker.getDayOfMonth(); System.out.println(year +","+ month +","+ day); } }); //取消按鈕,如果不需要直接不設定即可 mDialog.setButton(DialogInterface.BUTTON_NEGATIVE,"取消",new DialogInterface.OnClickListener(){ @Override publicvoid onClick(DialogInterface dialog,int which){ System.out.println("BUTTON_NEGATIVE~~"); } }); mDialog.show();}
來源:http://www.it165.net/pro/html/201503/36757.html
Android DatePickerDialog 使用方法