Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Min date Max date not working in xamarin android

I'm using the xamarin android datepicker dialog fragment. but tried to enable date between today and toady + 3 days. It's not working. It's not even working for min date options only.

public static readonly string TAG = "X:" + typeof (DatePickerFragment).Name.ToUpper();
        Action<DateTime> _dateSelectedHandler = delegate { };

        public void OnDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth)
        {
            // Note: monthOfYear is a value between 0 and 11, not 1 and 12!
            DateTime selectedDate = new DateTime(year, monthOfYear +1, dayOfMonth);
            Log.Debug(TAG, selectedDate.ToLongDateString());
            _dateSelectedHandler(selectedDate);
        }

        public static DatePickerFragment NewInstance(Action<DateTime> onDateSelected)
        {
            DatePickerFragment frag = new DatePickerFragment();
            frag._dateSelectedHandler = onDateSelected;
            return frag;
        }

        public override Dialog OnCreateDialog(Bundle savedInstanceState)
        {
            DateTime currently = DateTime.Now;
            DatePickerDialog dialog = new DatePickerDialog(Activity, this, currently.Year, currently.Month - 1,
                                                           currently.Day);

            dialog.DatePicker.MinDate = currently.Millisecond;
            dialog.DatePicker.MinDate = currently.AddDays(3).Millisecond;

            return dialog;
        }
like image 360
Balaji Marimuthu Avatar asked Jan 01 '23 09:01

Balaji Marimuthu


2 Answers

You could change the code of OnCreateDialog.

 public override Dialog OnCreateDialog(Bundle savedInstanceState)
    {
        DateTime currently = DateTime.Now;
        DatePickerDialog dialog = new DatePickerDialog(Activity,
                                                       this,
                                                       currently.Year,
                                                       currently.Month - 1,
                                                       currently.Day);

       dialog.DatePicker.MinDate = (long)(DateTime.Now.Date - new DateTime(1970, 1, 1)).TotalMilliseconds-1000 * 60 * 60 * 24 * 3;
       dialog.DatePicker.MaxDate = (long)(DateTime.Now.Date - new DateTime(1970, 1, 1)).TotalMilliseconds + 1000 * 60 * 60 * 24 * 3;
        return dialog;
    }

There is screenshot of DatePicker.Note: i set the minimum date is three days ago, max date is three days later.

enter image description here

like image 170
Leon Lu - MSFT Avatar answered Jan 19 '23 07:01

Leon Lu - MSFT


Just a small improvement for previous answer for developers who don't want to count ranges by hands.

public override Dialog OnCreateDialog(Bundle savedInstanceState)
{
    DateTime currently = DateTime.Now;
    DatePickerDialog dialog = new DatePickerDialog(Activity,
                                                   this,
                                                   currently.Year,
                                                   currently.Month - 1,
                                                   currently.Day);

    dialog.DatePicker.MinDate = (long)(currently.AddDays(-3) - new DateTime(1970, 1, 1)).TotalMilliseconds;
    dialog.DatePicker.MaxDate = (long)(currently.AddDays(3)  - new DateTime(1970, 1, 1)).TotalMilliseconds;
    return dialog;
}
like image 33
NightMan Avatar answered Jan 19 '23 05:01

NightMan