Abhishek Kumar
Abhishek Kumar

Reputation: 1265

Android DatePicker dialog, date should come from tomorrow

 Calendar calender = Calendar.getInstance();
    final CustomDatePickerDialog pickerDialog = new CustomDatePickerDialog(LabCheckOutActivity.this,
    myDateListener, calender.get(Calendar.YEAR), calender.get(Calendar.MONTH),
    calender.get(Calendar.DAY_OF_MONTH)+1);
    pickerDialog.getDatePicker().setMinDate(System.currentTimeMillis()-1000);
    pickerDialog.show();

by Using this code, in dialog date is pointed to tomorrow but user can also select todays date.I want user can select date from tomorrow not today.

public class CustomDatePickerDialog extends DatePickerDialog {

int maxYear;
int maxMonth;
int maxDay;

public CustomDatePickerDialog(Context context, OnDateSetListener callBack, int year, int monthOfYear, int dayOfMonth) {
    super(context, callBack, year, monthOfYear, dayOfMonth);
}

public void setMaxDate(long maxDate) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        getDatePicker().setMaxDate(System.currentTimeMillis());
    } else {
        final Calendar c = Calendar.getInstance();
        c.setTimeInMillis(maxDate);
        maxYear = c.get(Calendar.YEAR);
        maxMonth = c.get(Calendar.MONTH);
        maxDay = c.get(Calendar.DAY_OF_MONTH);
    }
}

@Override
public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        super.onDateChanged(view, year, monthOfYear, dayOfMonth);
    } else {
        if (year > maxYear)
            view.updateDate(maxYear, maxMonth, maxDay);

        if (monthOfYear > maxMonth && year == maxYear)
            view.updateDate(maxYear, maxMonth, maxDay);

        if (dayOfMonth > maxDay && year == maxYear && monthOfYear == maxMonth)
            view.updateDate(maxYear, maxMonth, maxDay);
    }
}

}

Upvotes: 2

Views: 2621

Answers (3)

Geek
Geek

Reputation: 1530

Please see complete implementation below:

DialogFragment class

public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener
{

    public DatePickerFragment()
    {

    }

    public void setiDateTimeListener(IDateTimeListener iDateTimeListener)
    {
        this.iDateTimeListener = iDateTimeListener;
    }

    @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);

        DatePickerDialog datePickerDialog = new DatePickerDialog(getActivity(), this, year, month, day);

        //        Set minimum date as tommorw
        datePickerDialog.getDatePicker().setMinDate(System.currentTimeMillis() + 24*60*60*1000);

        //        If need to set max date then use this also
        //        datePickerDialog.getDatePicker().setMaxDate(System.currentTimeMillis());

        // Create a new instance of DatePickerDialog and return it
        return datePickerDialog;
    }

    @Override
    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth)
    {
        try
        {
            String selectedDt = dayOfMonth+"-"+(monthOfYear + 1)+"-"+year;

            iDateTimeListener.onDateSet(selectedDt);

        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }

}

Interface must be implemented in date picker calling class

public interface IDateTimeListener
{
    public void onDateSet(String date);
}

Calling dialog fragment

public void showDatePickerDialog()
{
    DatePickerFragment datePickerFragment = new DatePickerFragment();
    datePickerFragment.setiDateTimeListener(this);
 datePickerFragment.show(getActivity().getSupportFragmentManager(),"datePicker");
}

Upvotes: 3

Nidhin
Nidhin

Reputation: 1838

   if (CustomVerticalCalendarView.isPreviousDateDisabled()) { // disable previous date disable flow
                int daysOfYear = listCalender.get(Calendar.DAY_OF_YEAR);
                int currentDate = today.get(Calendar.DAY_OF_YEAR);
                int listYear = listCalender.get(Calendar.YEAR);
                int currentYear = today.get(Calendar.YEAR);
                if (daysOfYear < currentDate || listYear < currentYear) {
                    checkBox.setEnabled(false);
    checkBox.setTextColor(ContextCompat.getColor(checkBox.getContext(), R.color.dark_gray));
                }
            }

Hope this code helps you.

Upvotes: 0

Rishabh Maurya
Rishabh Maurya

Reputation: 1523

Use

pickerDialog.getDatePicker().setMinDate(System.currentTimeMillis()+24*60*60*1000);//where 24*60*60*1000 represents the total timestamp for one day

instead of

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

Upvotes: 8

Related Questions