0

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;
    }

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

4

3 回答 3

0

尝试从这里使用日期选择器。

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

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
    }
}
于 2016-02-12T11:36:28.190 回答
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;
    }

希望它会帮助你!

于 2016-02-12T11:36:38.777 回答
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);

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

第1步:

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

现在 datepicker 值变为 2016 年 12 月 2 日。

在这种情况下,

如果(年 < 年) = 假

if (monthOfYear < mmonth && year == myear) = false

if (dayOfMonth < mday && year == myear && monthOfYear == mmonth) = true

第2步

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

在这种情况下:

如果(年 < 年) = 假

if (monthOfYear < mmonth && year == myear) = false

if (dayOfMonth < mday && year == myear && monthOfYear == mmonth) = false - 这种情况变为假,因为 dayOfMonth 和 mday 是相同的。但您正在检查更早的日期。

于 2016-02-12T22:44:47.503 回答