-2

I have two DatePicker. One with From date and other with To date. I want to display To date always greater than from date according to From date selection .I am using the Android default date picker, and want to disable the past dates of TO datepicker if its greater than the From date and vice versa. I know this topic has been asked many times here. But, I couldn't make my code work like the suggested solutions, so please help?

Calendar calendarOne = Calendar.getInstance();


     datePickerFrom= new DatePickerDialog(getActivity(), new  
     DatePickerDialog.OnDateSetListener() { 

     @Override 
     public void onDateSet(DatePicker view, int year, int monthOfYear, 
     int dayOfMonth) {
        StringBuilder selectedDate = new 
    StringBuilder().append(dayOfMonth).append("-").append(monthOfYear + 
    1).append("-").append(year);
     fromText.setText(selectedDate);
     fromText.setTextColor(android.graphics.Color.BLACK);
    } 

  }, calendarOne.get(Calendar.YEAR), calendarOne.get(Calendar.MONTH), 
     calendarOne.get(Calendar.DAY_OF_MONTH));

 fromText.setOnClickListener(new View.OnClickListener() {
    @Override 
    public void onClick(View view) {
        datePickerFrom.getDatePicker().setMaxDate(new 
     Date().getTime()); 
        datePickerFrom.show(); 
    } 
}); 


  Calendar calendarTwo = Calendar.getInstance();
  datePickerTo = new DatePickerDialog(getActivity(), new 
  DatePickerDialog.OnDateSetListener() {
    @Override 
    public void onDateSet(DatePicker view, int year, int monthOfYear, int 
    dayOfMonth) {
        StringBuilder selectedDate = new 
   StringBuilder().append(dayOfMonth).append("-").append(monthOfYear + 
   1).append("-").append(year);
        toText.setText(selectedDate);
        toText.setTextColor(android.graphics.Color.BLACK);
      } 
   }, calendarTwo.get(Calendar.YEAR), calendarTwo.get(Calendar.MONTH), 
   calendarTwo.get(Calendar.DAY_OF_MONTH));

   toText.setOnClickListener(new View.OnClickListener() {
    @Override 
    public void onClick(View view) {
       datePickerTo.getDatePicker().setMaxDate(new Date().getTime()); 
       datePickerTo.show(); 
      } 
    }); 
   } 

................................ Updated Code

    final Calendar calendarOne = Calendar.getInstance();
    datePickerFrom= new DatePickerDialog(getActivity(), new
            DatePickerDialog.OnDateSetListener()
            {
                @RequiresApi(api = Build.VERSION_CODES.N)
                @Override
                public void onDateSet(DatePicker view, int year, final int 
    monthOfYear, int dayOfMonth)
                {
                    StringBuilder selectedDate = new
                            StringBuilder().append(dayOfMonth).append("-
      ").append(monthOfYear + 1).append("-").append(year);
                  fromText.setText(selectedDate);
                  fromText.setTextColor(android.graphics.Color.BLACK);

                    Calendar calendarTwo = Calendar.getInstance();
                   datePickerTo = new DatePickerDialog(getActivity());


    datePickerTo.getDatePicker().setMinDate(calendarOne.getTimeInMillis());

                   datePickerTo = new DatePickerDialog(activity, new 
   DatePickerDialog.OnDateSetListener() {

                        @Override
                        public void onDateSet(DatePicker view, int year, int 
    month, int dayOfMonth) {
                            StringBuilder selectedDate = new 
    StringBuilder().append(dayOfMonth).append("-").append(monthOfYear + 
    1).append("-").append(year);
                              toText.setText(selectedDate);

   toText.setTextColor(android.graphics.Color.BLACK);
                        }
                    }, calendarTwo.get(Calendar.YEAR), 
   calendarTwo.get(Calendar.MONTH),
                        calendarTwo.get(Calendar.DAY_OF_MONTH));

                      toText.setOnClickListener(new View.OnClickListener()
                    {
                        @Override
                        public void onClick(View view)
                        {
                           datePickerTo.getDatePicker().setMaxDate(new 
     Date().getTime());
                           datePickerTo.show();
                        }
                    });

                }

            }, calendarOne.get(Calendar.YEAR), 
      calendarOne.get(Calendar.MONTH),
            calendarOne.get(Calendar.DAY_OF_MONTH));

   fromText.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            datePickerFrom.getDatePicker().setMaxDate(new
                    Date().getTime());
            datePickerFrom.show();
        }
    });

1 Answers1

3

First of all declare following in your class before onCreate :

private String fromDate;
private DatePickerDialog fromDatePicker;
private DatePickerDialog.OnDateSetListener fromDatePickerListener;
private Calendar fromDateCalendar;
private String toDate;
private DatePickerDialog toDatePicker;
private DatePickerDialog.OnDateSetListener toDatePickerListener;
private Calendar toDateCalendar;

After that in your onCreate method add following code:

fromDateCalendar = Calendar.getInstance();
    fromDatePickerListener = new DatePickerDialog.OnDateSetListener() {

        @Override
        public void onDateSet(DatePicker view, int year, int monthOfYear,
                              int dayOfMonth) {
            // TODO Auto-generated method stub
            fromDateCalendar.set(Calendar.YEAR, year);
            fromDateCalendar.set(Calendar.MONTH, monthOfYear);
            fromDateCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);

            fromDate = fromDateCalendar.get(Calendar.YEAR) + "-" + (fromDateCalendar.get(Calendar.MONTH)+1) + "-" + fromDateCalendar.get(Calendar.DAY_OF_MONTH);
            //etFromDate.setText(fromDate);
            toDatePicker.getDatePicker().setMinDate(fromDateCalendar.getTimeInMillis());
        }

    };

    toDateCalendar = Calendar.getInstance();
    toDatePickerListener = new DatePickerDialog.OnDateSetListener() {

        @Override
        public void onDateSet(DatePicker view, int year, int monthOfYear,
                              int dayOfMonth) {
            // TODO Auto-generated method stub
            toDateCalendar.set(Calendar.YEAR, year);
            toDateCalendar.set(Calendar.MONTH, monthOfYear);
            toDateCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);

            toDate = toDateCalendar.get(Calendar.YEAR) + "-" + (toDateCalendar.get(Calendar.MONTH)+1) + "-" + toDateCalendar.get(Calendar.DAY_OF_MONTH);
            //etToDate.setText(toDate);
        }

    };

    toDatePicker = new DatePickerDialog(getContext(),toDatePickerListener, toDateCalendar.get(Calendar.YEAR), toDateCalendar.get(Calendar.MONTH), toDateCalendar.get(Calendar.DAY_OF_MONTH));
    fromDatePicker = new DatePickerDialog(getContext(),fromDatePickerListener, fromDateCalendar.get(Calendar.YEAR), fromDateCalendar.get(Calendar.MONTH), fromDateCalendar.get(Calendar.DAY_OF_MONTH));

Next step is when you want to show your datePicker upon clicking button or edit text where ever you want to show your date picker use following lines to show:

fromDatePicker.show();
toDatePicker.show();

Also you can use strings fromDate and toDate to show selected dates if you want to show them anywhere like in a textView or editText.

Muhammad Saad Rafique
  • 3,158
  • 1
  • 13
  • 21
  • Comments are not for extended discussion; this conversation has been [moved to chat](http://chat.stackoverflow.com/rooms/159407/discussion-on-answer-by-m-saad-lakhan-how-to-do-android-datepicker-to-date-great). – Andy Nov 20 '17 at 17:41
  • hai can anyone help – user8737536 Nov 24 '17 at 09:57