【问题标题】:Set End datepicker Minimum date is More than Start Datepicker selected date in android not Working设置结束日期选择器最小日期大于开始日期选择器在android中选择的日期不工作
【发布时间】:2016-03-01 09:56:24
【问题描述】:

我想显示结束最小日期值不小于开始日期值中的选定日期

但在我的代码中显示结束日期最小值是从今天开始的日期。

帮帮我,如何解决。

// 用于日期选择器显示

@Override
protected Dialog onCreateDialog(int id) {

    switch (id) {
        case DATE_PICKER_ID:

            // open datepicker dialog.
            // set date picker for current date
            // add pickerListener listner to date picker
            return new DatePickerDialog(this, pickerListener1, Startyear, Startmonth, Startday);

        case DATE_PICKER_ID1:

            // open datepicker dialog.
            // set date picker for current date
            // add pickerListener listner to date picker
            //return new DatePickerDialog(this, pickerListener2, Startyear, Startmonth, Startday);


       // set minimum date of end datepicker

            DatePickerDialog dialog = new DatePickerDialog(this, pickerListener2, Startyear, Startmonth, Startday);


            Calendar c = Calendar.getInstance();
            c.set(Startyear1new, Startmonth1new, Startday1new);
            dialog.getDatePicker().setMinDate(c.getTimeInMillis()-10000);
        return dialog;


    }
    return null;
}

private DatePickerDialog.OnDateSetListener pickerListener1 = new DatePickerDialog.OnDateSetListener() {

    // when dialog box is closed, below method will be called.
    @Override
    public void onDateSet(DatePicker view, int selectedYear,
                          int selectedMonth, int selectedDay) {

        Startyear = selectedYear;
        Startmonth = selectedMonth;
        Startday = selectedDay;



        // Show selected date
        StringBuilder dateValue=new StringBuilder().append(Startday).append("-")
                .append(Startmonth + 1).append("-").append(Startyear).append(" ");

        //for Converting Correct Date format Save into Database
        SimpleDateFormat sdf123 = new SimpleDateFormat("dd-MM-yyyy");
        String abs1= dateValue.toString();
        Date testDate1 = null;
        try {
            testDate1 = sdf123.parse(abs1);
        } catch (ParseException e) {

            e.printStackTrace();
        }
        SimpleDateFormat formatter1 = new SimpleDateFormat("dd-MM-yyyy");
        String DateFormat=formatter1.format(testDate1);
        CampStartDateEdittext_datepicker.setText(DateFormat);


    }
};

private DatePickerDialog.OnDateSetListener pickerListener2 = new DatePickerDialog.OnDateSetListener() {

    // when dialog box is closed, below method will be called.
    @Override
    public void onDateSet(DatePicker view, int selectedYear,
                          int selectedMonth, int selectedDay)
    {

        Endyear = selectedYear;
        Endmonth = selectedMonth;
        Endday = selectedDay;


        // Show selected date
        StringBuilder dateValue=new StringBuilder().append(Endday).append("-")
                .append(Endmonth + 1).append("-").append(Endyear).append(" ");


        //for Converting Correct Date format Save into Database
        SimpleDateFormat sdf123 = new SimpleDateFormat("dd-MM-yyyy");
        String abs1= dateValue.toString();
        Date testDate23 = null;
        try {
            testDate23 = sdf123.parse(abs1);
        } catch (ParseException e) {

            e.printStackTrace();
        }
        SimpleDateFormat formatter1 = new SimpleDateFormat("dd-MM-yyyy");
        String DateFormat=formatter1.format(testDate23);

        Camp_EndDateEdittext_datepicker.setText(DateFormat);


    }
};

【问题讨论】:

    标签: android date datepicker


    【解决方案1】:

    您可以尝试将结束日期选择器最小值的验证设置为大于您的开始日期选择器值

    mEndDateButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (mEndDateTimeCal != null) {
                        mNowEndCal = mEndDateTimeCal;
                    } else {
                        mNowEndCal = Calendar.getInstance();
                    }
    
                    DatePickerDialog dialog;
                    if (mStartDay != null && mStartMonth != null && mStartYear != null) {
                        dialog = new DatePickerDialog(FOBookTripActivity.this, new DatePickerDialog.OnDateSetListener() {
                            @Override
                            public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                                mEndYear = year;
                                mEndMonth = monthOfYear;
                                mEndDay = dayOfMonth;
                                if (mEndDateTimeCal == null) {
                                    mEndDateTimeCal = Calendar.getInstance();
                                }
                                mStartDateTimeCal.set(Calendar.YEAR, mStartYear);
                                mStartDateTimeCal.set(Calendar.MONTH, mStartMonth);
                                mStartDateTimeCal.set(Calendar.DAY_OF_MONTH, mStartDay);
    
                                mEndDateTimeCal.set(Calendar.YEAR, year);
                                mEndDateTimeCal.set(Calendar.MONTH, monthOfYear);
                                mEndDateTimeCal.set(Calendar.DAY_OF_MONTH, dayOfMonth);
    
                                try {
                                    if (mEndDateTimeCal != null && mEndDateTimeCal.before(mStartDateTimeCal)) {
                                        mEndDateTimeCal = mStartDateTimeCal;
                                        mEndDateButton.setText(CustomUtils.timeStampToHumanReadableDate(mEndDateTimeCal.getTimeInMillis() / 1000));
                                    }
                                } catch (ParseException e) {
                                    e.printStackTrace();\
                                }
                            }
                        }, mStartYear, mStartMonth, mStartDay);
    
                        Calendar cal = Calendar.getInstance();
                        cal.set(mStartYear, mStartMonth, mStartDay);
    
                        dialog.getDatePicker().setMinDate(cal.getTimeInMillis() - 1000);
                    } 
                    dialog.show();
                    dialog.getDatePicker().setMinDate(mNowStartCal.getTimeInMillis());
    
                }
            });
    

    希望这对你有用。

    【讨论】:

    • 我想将在开始日期选择器中选择的日期显示为结束日期选择器中的最小日期。没有任何验证。
    • 在这种情况下,在您的 onDateSelected for startDate 选择器中,您可以设置 endDate 选择器的最短日期。我希望你明白了,或者你想让我为你提供 sn-p。
    • 我已经用完整的 sn-p 添加了另一个答案。如果我解决了您的问题,请投票给我。
    • 这段代码从 1900 年 1 月开始显示,而不是我选择的日期
    • 我猜你没有看到我的其他答案。这就是你问题的解决方案。我正在使用相同的逻辑,并且运行良好。
    【解决方案2】:

    试试这个:

                DatePicker startDatePickerDialog startDatePickerDialog = new DatePickerstartDatePickerDialog(FOBookTripActivity.this, new DatePickerstartDatePickerDialog.OnDateSetListener() {
                    @Override
                    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                        mStartDay = dayOfMonth;
                        mStartMonth = monthOfYear;
                        mStartYear = year;
                        if (mStartDateTimeCal == null) {
                            mStartDateTimeCal = Calendar.getInstance();
                        }
                        mStartDateTimeCal.set(Calendar.YEAR, year);
                        mStartDateTimeCal.set(Calendar.MONTH, monthOfYear);
                        mStartDateTimeCal.set(Calendar.DAY_OF_MONTH, dayOfMonth);
                        try {
                            mStartDateButton.setText(CustomUtils.timeStampToHumanReadableDate(mStartDateTimeCal.getTimeInMillis() / 1000));
    
    
                            //setting the start date selected as minimum date for End Date Picker Dialog
                            endDatePickerDialog.getDatePicker().setMinDate(mStartDateTimeCal.getTimeInMillis() - 1000);
    
                        } catch (ParseException e) {
                            e.printStackTrace();
                        }
                    }
                }, mNowStartCal.get(Calendar.YEAR), mNowStartCal.get(Calendar.MONTH), mNowStartCal.get(Calendar.DAY_OF_MONTH));
    
                startDatePickerDialog.show();
    

    【讨论】:

      【解决方案3】:

      在第一个 datePicker 的日期选择中,用所选日期初始化第二个。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-03-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多