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(" "));
}
};
Related videos on Youtube
![MetaldroiD](https://i.stack.imgur.com/uIlQF.jpg?s=256&g=1)
Author by
MetaldroiD
Updated on March 29, 2020Comments
-
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 over 10 yearsDate 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 over 10 yearsOkay if it so, then please help me to validate the selected date with the current date. How do i do it?
-
Tapeshvar over 10 yearsYou can get the current date with Calendar.getInstance();
-
MetaldroiD over 10 yearsBut it shows
IllegalArgumentException
for this line : dpd.getDatePicker().setMinDate(newDate2.getTime()); -
MetaldroiD over 10 yearsOkay 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 over 10 yearsdpd.getDatePicker().setMinDate(System.currentTimeMillis());
-
MetaldroiD over 10 yearsGreat, but why doesn't it identify
mDateSetListener
if i putonDateSet
method inside button onClick? How do i fix this? -
MetaldroiD over 10 yearsYes 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 over 10 yearsin your phone which android os version ??
-
MetaldroiD over 10 yearsIts Android Jelly Bean 4.4