Search code examples
androiddatepickergregorian-calendar

how to disable preveious date in a date picker?


i am using Gregorian calendar and i need to disable a previous date to till current date in android. i already checked setMinDate method but its not working.. can anyone help me? here is my code..

 public void SelectDateTime() {
        final View dialogView = View.inflate(getApplicationContext(), R.layout.date_picker_activate, null);
        DateTimeDialog = new AlertDialog.Builder(getApplicationContext()).create();
        dialogView.findViewById(R.id.cancelBtn).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                DateTimeDialog.dismiss();
            }
        });
        dialogView.findViewById(R.id.date_time_set).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                DatePicker datePicker = (DatePicker) dialogView.findViewById(R.id.datePicker1);
                TimePicker timePicker = (TimePicker) dialogView.findViewById(R.id.timePicker);
                Calendar calendar = new GregorianCalendar(datePicker.getYear(),
                        datePicker.getMonth(),
                        datePicker.getDayOfMonth(),
                        timePicker.getCurrentHour(),
                        timePicker.getCurrentMinute());

                datePicker.getMinDate();

                final long today1 = System.currentTimeMillis() - 1000;

                calendar.after(System.currentTimeMillis());

               // datePicker.setMinDate(calendar.getTimeInMillis());

Solution

  • Use this code

        public static class DatePickerFragment extends DialogFragment
            implements DatePickerDialog.OnDateSetListener {
    
        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState) {
    
            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 dialog = new DatePickerDialog(getActivity(), this, year, month, day);
            // dialog.getDatePicker().setMaxDate(c.getTimeInMillis());
            dialog.getDatePicker().setMinDate(c.getTimeInMillis());
            return dialog;
        }
    
        public void onDateSet(DatePicker view, int year, int month, int day) {
            txt_date.setText(String.format(Locale.ENGLISH, "%02d/%02d/%d", day, month + 1, year));
        }
    }
    

    Call this method in side button click like

    DialogFragment newFragment = new DatePickerFragment();
                newFragment.show(getActivity().getSupportFragmentManager(), "datePicker");
    

    This line set min date - dialog.getDatePicker().setMinDate(c.getTimeInMillis());

    and use this to set max date

    dialog.getDatePicker().setMaxDate(c.getTimeInMillis());