Android DatePickerDialog 使用方法


(一)在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.0CM系統上是沒有問題的:對話框上面有完成按鈕和取消按鈕,點擊完成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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM