1. 程式人生 > >Android日期選擇器DatePickerDialog的使用

Android日期選擇器DatePickerDialog的使用

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

收工