Android DatePicker : Disabling the PREVIOUS dates based on the CURRENT date

22,212

Solution 1

private DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() {
    // the callback received when the user "sets" the Date in the
    // DatePickerDialog
    public void onDateSet(DatePicker view, int yearSelected,
            int monthOfYear, int dayOfMonth) {
        year = yearSelected;
        month = monthOfYear + 1;
        day = dayOfMonth;
        // Set the Selected Date in Select date Button
        txtarrivedate.setText(year + "-" + month + "-" + day);
    }
};

// Method automatically gets Called when you call showDialog() method

   @Override
   protected Dialog onCreateDialog(int id) {
    switch (id) {
    case 1:
        // create a new DatePickerDialog with values you want to show

        DatePickerDialog da = new DatePickerDialog(this, mDateSetListener,
                mYear, mMonth, mDay);
        Calendar c = Calendar.getInstance();

        c.add(Calendar.DATE, 1);
        Date newDate = c.getTime();
        da.getDatePicker().setMinDate(newDate.getTime());
        return da;
        // create a new TimePickerDialog with values you want to show
    case 2:
        // create a new DatePickerDialog with values you want to show
        DatePickerDialog da1 = new DatePickerDialog(this,
                mDateSetListener2, mYear, mMonth, mDay);
        Calendar c1 = Calendar.getInstance();

        c1.add(Calendar.DATE, 1);
        Date newDate2 = c1.getTime();
        da1.getDatePicker().setMinDate(newDate2.getTime());
        return da1;

    }
    return null;
}

only use use the for calling dialog showDialog(1);

Solution 2

Simply try this solution:

dpd.getDatePicker().setMinDate(System.currentTimeMillis() - 1000);

Solution 3

Try this:

// set date picker with current date
DatePickerDialog date = new DatePickerDialog(this, datePickerListener, mYear,mMonth,mDay){
            // Comapre the date selected in picker with the current date.      
            @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;
    }        

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

    // as soon as the dialog box is closed, this method will be called.
    public void onDateSet(DatePicker view, int selectedYear,
            int selectedMonth, int selectedDay) {
        mYear = selectedYear;
        mMonth = selectedMonth;
        mDay = selectedDay;

        // set selected date into textview
        txtDate.setText(new StringBuilder().append(mMonth + 1)
                .append("-").append(mDay).append("-").append(mYear)
                .append(" "));    

    }
};
Share:
22,212

Related videos on Youtube

MetaldroiD
Author by

MetaldroiD

Updated on March 29, 2020

Comments

  • MetaldroiD
    MetaldroiD over 4 years

    I have a DatePicker in my app which is set in this way :

    Layout :

                <TextView
                    android:id="@+id/traveltext"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1.11"
                    android:text="Date Of Travel"
                    android:textStyle="bold" />
    
                 <EditText
                android:id="@+id/txtDate"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1" >
            </EditText>
    
                  <Button
                android:id="@+id/btnCalendar"
                android:layout_width="30dp"
                android:layout_height="42dp"
                android:layout_marginRight="50dp"
                android:background="@drawable/date" >
            </Button>
            </LinearLayout>
    

    Global Values :

    Button btnCalendar;
    EditText txtDate;
    private int mYear, mMonth, mDay;
    

    OnCreate :

    btnCalendar = (Button) findViewById(R.id.btnCalendar);
        txtDate = (EditText) findViewById(R.id.txtDate);
        btnCalendar.setOnClickListener(this);
    

    Method :

     @Override
    public void onClick(View v) {
    
        if (v == btnCalendar) {
    
            // Process to get Current Date
            final Calendar c = Calendar.getInstance();
            mYear = c.get(Calendar.YEAR);
            mMonth = c.get(Calendar.MONTH);
            mDay = c.get(Calendar.DAY_OF_MONTH);
    
            // Launch Date Picker Dialog
            DatePickerDialog dpd = new DatePickerDialog(this,
                    new DatePickerDialog.OnDateSetListener() {
    
                        @Override
                        public void onDateSet(DatePicker view, int year,
                                int monthOfYear, int dayOfMonth) {
                            // Display Selected date in textbox
                            txtDate.setText(dayOfMonth + "-"
                                    + (monthOfYear + 1) + "-" + year);
    
                        }
                    }, mYear, mMonth, mDay);
            dpd.show();
        }   }
    

    Now my question is, how do i disable the PREVIOUS dates based on the CURRENT date?

    Please help. Thanks.

  • Tapeshvar
    Tapeshvar over 10 years
    Date picker is just another option to generate the dates which you could get it from an edittext field. So I personally think this will be an easier way of doing things here.
  • MetaldroiD
    MetaldroiD over 10 years
    Okay if it so, then please help me to validate the selected date with the current date. How do i do it?
  • Tapeshvar
    Tapeshvar over 10 years
    You can get the current date with Calendar.getInstance();
  • MetaldroiD
    MetaldroiD over 10 years
    But it shows IllegalArgumentException for this line : dpd.getDatePicker().setMinDate(newDate2.getTime());
  • MetaldroiD
    MetaldroiD over 10 years
    Okay dude but the DatePickerDialog doesn't pop up once i click the button i.e btnCalendar(See in layout) So where do i put the onClick?
  • Admin
    Admin over 10 years
    dpd.getDatePicker().setMinDate(System.currentTimeMillis());
  • MetaldroiD
    MetaldroiD over 10 years
    Great, but why doesn't it identify mDateSetListener if i put onDateSetmethod inside button onClick? How do i fix this?
  • MetaldroiD
    MetaldroiD over 10 years
    Yes now i have a small question : What doesn't it work when i install it on my phone? I mean previous dates are selected which shouldn't happen.
  • Admin
    Admin over 10 years
    in your phone which android os version ??
  • MetaldroiD
    MetaldroiD over 10 years
    Its Android Jelly Bean 4.4