如何在Android Xamarin中的日期选择器中隐藏以前的日期

如何在Android Xamarin中的日期选择器中隐藏以前的日期,android,xamarin,xamarin.android,xamarin.forms,xamarin-studio,Android,Xamarin,Xamarin.android,Xamarin.forms,Xamarin Studio,我正在使用此代码,但OnDateChanged方法未被调用。为什么,我在哪里出错?请帮助我 public class DatePickerFragment : DialogFragment, DatePickerDialog.IOnDateSetListener,DatePicker.IOnDateChangedListener { // TAG can be any string of your choice. public stat

我正在使用此代码,但OnDateChanged方法未被调用。为什么,我在哪里出错?请帮助我

public class DatePickerFragment : DialogFragment,
                              DatePickerDialog.IOnDateSetListener,DatePicker.IOnDateChangedListener
{
// TAG can be any string of your choice.
public static readonly string TAG = "X:" + typeof(DatePickerFragment).Name.ToUpper();

// Initialize this value to prevent NullReferenceExceptions.
Action<DateTime> _dateSelectedHandler = delegate { };
DateTime currently = DateTime.Now;
public static DatePickerFragment NewInstance(Action<DateTime> onDateSelected)
{
    DatePickerFragment frag = new DatePickerFragment();
    frag._dateSelectedHandler = onDateSelected;

    return frag;
}

public override Dialog OnCreateDialog(Bundle savedInstanceState)
{

    DatePickerDialog dialog = new DatePickerDialog(Activity,
                                                   this,
                                                   currently.Year,
                                                   currently.Month,
                                                   currently.Day);




    return dialog;
}


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

    _dateSelectedHandler(selectedDate);
}

public void OnDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth)
{
    if (year < currently.Year)
        view.UpdateDate(currently.Year, currently.Month, currently.Day);

    if(monthOfYear < currently.Month && monthOfYear == currently.Year)
        view.UpdateDate(currently.Year, currently.Month, currently.Day);

    if(dayOfMonth< currently.Day && year == currently.Year &&monthOfYear == currently.Month)
        view.UpdateDate(currently.Year, currently.Month, currently.Day);

}
公共类DatePickerFragment:DialogFragment, DatePickerDialog.IOnDateSetListener,DatePicker.IOnDateChangedListener { //标记可以是您选择的任何字符串。 公共静态只读字符串TAG=“X:”+typeof(DatePickerFragment).Name.ToUpper(); //初始化此值以防止NullReferenceException。 动作_dateSelectedHandler=委托{}; DateTime当前=DateTime.Now; 公共静态DatePickerFragment NewInstance(操作onDateSelected) { DatePickerFragment frag=新的DatePickerFragment(); frag.\u dateSelectedHandler=onDateSelected; 返回碎片; } 创建对话框上的公共覆盖对话框(Bundle savedInstanceState) { DatePickerDialog对话框=新建DatePickerDialog(活动, 这 目前,今年,, 目前,月份,, 当前(天); 返回对话框; } 公共void OnDateSet(日期选择器视图,整数年,整数月,整数月) { //注意:monthOfYear是介于0和11之间的值,而不是介于1和12之间的值! DateTime selectedDate=新的日期时间(年、月+1、月天数); _dateSelectedHandler(selectedDate); } 公共无效OnDateChanged(日期选择器视图,整数年,整数月,整数月) { 如果(年份<当前年份) view.UpdateDate(当前.Year,当前.Month,当前.Day); if(monthOfYear<当前.Month&&monthOfYear==当前.Year) view.UpdateDate(当前.Year,当前.Month,当前.Day); 如果(dayOfMonth }


我试图从日期选择器禁用以前的日期,但日期更改侦听器未调用。我想对datepicker隐藏过去的日期。请您帮助我如何做到这一点。

由于DatePickerDialog是datepicker的包装,因此在这种情况下,实际的datepicker小部件没有将
OnDateChanged
设置为其侦听器,因此不会被调用

要禁用DatePicker中的日期,只需设置其MinDate或MaxDate属性。因此,如果您试图禁用当前日期之前的日期,请在
OnCreateDialog
中设置MinDate:

dialog.DatePicker.MinDate = Java.Lang.JavaSystem.CurrentTimeMillis();

您需要使用
Java.Lang.JavaSystem.CurrentTimeMillis()
因为您需要提供日期

,因为DatePickerDialog是日期选择器的包装器,所以在本例中,实际的日期选择器小部件没有将
OnDateChanged
设置为其侦听器,因此不会被调用

要禁用DatePicker中的日期,只需设置其MinDate或MaxDate属性。因此,如果您试图禁用当前日期之前的日期,请在
OnCreateDialog
中设置MinDate:

dialog.DatePicker.MinDate = Java.Lang.JavaSystem.CurrentTimeMillis();

您需要使用
Java.Lang.JavaSystem.CurrentTimeMillis()因为您需要提供日期

我用上面提到的代码修改了Xamarin DatePicker示例。您能否运行此项目以查看是否仍然存在相同的问题?你在测试什么Android版本?它只在那个版本上发生吗?谢谢你用示例代码重播。我还有一个问题,如何在时间选择器中隐藏以前的时间。我用上面提到的代码修改了Xamarin DatePicker示例。您能否运行此项目以查看是否仍然存在相同的问题?你在测试什么Android版本?它只发生在那个版本上吗?谢谢你用示例代码重播。我还有一个问题,如何在时间选择器中隐藏以前的时间。