Android日期選擇器DatePickerDialog的使用
阿新 • • 發佈:2019-02-20
說實話,做了這麼久還是第一次用到這個日期選擇器,本來還以為要自己寫一個,拿到需求後已經做好自定義的準備了,一百度才發現原來原生就有,而且和我們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來獲取點選設定的日期,就這樣,取消不會觸發任何操作。
收工