Android:无法每次设置当前日期到日期选择器

时间:2016-02-12 11:29:50

标签: android date datepicker android-simon-datepicker

我正在使用DatePicker在我的应用程序中向用户显示日期。     但是,我使用 onCreateDialog 方法向用户显示日期选择器,设置整数变量如下:      static final int DATE_DIALOG_ID = 999;     然后我打电话给下面的方法     的的ShowDialog(DATE_DIALOG_ID);

首次使用当前日期初始化日期选择器。到目前为止,一切都很好。

@Override
    protected Dialog onCreateDialog(int id) {
        Calendar c = Calendar.getInstance();
        final int myear = c.get(Calendar.YEAR);
        final int mmonth = c.get(Calendar.MONTH);
        final int mday = c.get(Calendar.DAY_OF_MONTH);
        Log.d("Executed", "hihihihihihihi");
        switch (id) {
            case DATE_DIALOG_ID:
                // set date picker as current date
                DatePickerDialog _date = new DatePickerDialog(this, AlertDialog.THEME_HOLO_LIGHT, datePickerListener, myear, mmonth,
                        mday) {



                    @Override
                    public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                        if (year < myear)
                            view.updateDate(myear, mmonth, mday);

                        if (monthOfYear < mmonth && year == myear)
                            view.updateDate(myear, mmonth, mday);

                        if (dayOfMonth < mday && year == myear && monthOfYear == mmonth)
                            view.updateDate(myear, mmonth, mday);

                    }

                };
                return _date;

        }
        return null;
    }

但问题是当我选择除当前日期之外的日期工作。但是当我再次尝试选择日期时,默认情况下日期选择器显示我最后选择的日期。每次日期选择器打开时我无法设置当前日期我怎么能这样做

3 个答案:

答案 0 :(得分:0)

尝试使用here中的日期选择器。

在您的活动中添加以下方法和类:

public void showDatePickerDialog() {
    DialogFragment newFragment = new DatePickerFragment();
    newFragment.show(getSupportFragmentManager(), "datePicker");
}

public static class DatePickerFragment extends DialogFragment
                            implements DatePickerDialog.OnDateSetListener {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // Use the current date as the default date in the picker
        final Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH);
        int day = c.get(Calendar.DAY_OF_MONTH);

        // Create a new instance of DatePickerDialog and return it
        return new DatePickerDialog(getActivity(), this, year, month, day);
    }

    public void onDateSet(DatePicker view, int year, int month, int day) {
        // Do something with the date chosen by the user
    }
}

答案 1 :(得分:0)

private Calendar c; 

@Override
onCreate(){

c = Calendar.getInstance();

}



@Override
    protected Dialog onCreateDialog(int id) {

        final int myear = c.get(Calendar.YEAR);
        final int mmonth = c.get(Calendar.MONTH);
        final int mday = c.get(Calendar.DAY_OF_MONTH);
        Log.d("Executed", "hihihihihihihi");
        switch (id) {
            case DATE_DIALOG_ID:
                // set date picker as current date
                DatePickerDialog _date = new DatePickerDialog(this, AlertDialog.THEME_HOLO_LIGHT, datePickerListener, myear, mmonth,
                        mday) {




                    @Override
                    public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {

                         /// Here you can set your updated date to calendar instance. So whenever you open it again, it will display last updated date
                         c.set(year, (monthOfYear- 1), dayOfMonth);

                        if (year < myear)
                            view.updateDate(myear, mmonth, mday);

                        if (monthOfYear < mmonth && year == myear)
                            view.updateDate(myear, mmonth, mday);

                        if (dayOfMonth < mday && year == myear && monthOfYear == mmonth)
                            view.updateDate(myear, mmonth, mday);

                    }

                };
                return _date;

        }
        return null;
    }

希望它会对你有所帮助!

答案 2 :(得分:0)

(英语不是我的第一语言,请在必要时更正)

我认为你的状况检查是错误的,

if (year < myear)
   view.updateDate(myear, mmonth, mday);

if (monthOfYear < mmonth && year == myear)
    view.updateDate(myear, mmonth, mday);

if (dayOfMonth < mday && year == myear && monthOfYear == mmonth)
    view.updateDate(myear, mmonth, mday);

例如:默认情况下,您将当前日期设置为今天(2016年2月13日)。

第1步:

在datePicker中,默认日期为2016年2月13日。现在您选择前一天(2016年2月12日)

现在,datepicker值变为12/2/2016。

在这种情况下,

if(year&lt; myear)= false

if(monthOfYear&lt; mmonth&amp;&amp; year == myear)= false

if(dayOfMonth&lt; mday&amp;&amp; year == myear&amp;&amp; monthOfYear == mmonth)= true

第2步

现在再次将datepicker日期更改为今天的日期(2016年2月13日)

在这种情况下:

if(year&lt; myear)= false

if(monthOfYear&lt; mmonth&amp;&amp; year == myear)= false

if(dayOfMonth&lt; mday&amp;&amp; year == myear&amp;&amp; monthOfYear == mmonth)= false - 此情况变为false,因为dayOfMonth和mday是相同的。但是你要检查更早的日期。