XML 上的 Xamarin Android DatePicker。如何触发事件以设置在 DatePicker 上选择的时间?
Xamarin Android DatePicker on XML. How do I fire a event to set time that is selected on DatePicker?
我正在使用 xml 开发一个 xamarin android 项目,我有一个日期选择器,我想在 xml 上使用我如何为下面的日期选择器触发事件是我的 xml DatePicker 代码:
<DatePicker
android:id="@+id/DatePicker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:datePickerMode="spinner"
android:calendarViewShown="false" />
Activity代码:
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.ChangeDateTime);
hour = DateTime.Now.Hour;
minute = DateTime.Now.Minute;
date = DateTime.Now;
DateTime newDateTime;
Vm.CurrentTime = hour.ToString() + minute.ToString();
TimePicker.CurrentHour = (Java.Lang.Integer)DateTime.Now.Hour;
TimePicker.CurrentMinute = (Java.Lang.Integer)DateTime.Now.Minute;
TimePicker.TimeChanged += delegate (object sender, TimePicker.TimeChangedEventArgs e)
{
Vm.CurrentTime = e.HourOfDay.ToString() + e.Minute.ToString();
};
DatePicker.DateTime = DateTime.Now;
}
我知道您可以使用 TimePicker 为 TimePicker.TimeChanged 做一个委托,但是对于 DatePicker 呢?
如果屏幕上有按钮,您实际上可以像下面这样使用点击事件:
SomeButton.Click += (sender, e) =>
{
//Do your action here
}
好的,这(对于 .NET)的工作方式有点奇怪,但正如 Android 设计的那样。
当您调用 DatePicker 的 de Init 方法时,您传递一个 IOnDateChangedListener,并在已实现接口的 OnSelectedDayChange 函数上处理它。
如果您不自己设置委托,通常 Xamarin 实现有一个较弱的委托来处理事件,但在这种情况下,因为 Init() 方法已经需要此接口,并且假设您将始终调用该方法为了初始化日期,他们没有实现弱委托,因此没有事件。
private EditText _txtdob;
DatePickerDialog _datePickerDialog;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.sign_up);
_txtdob.Focusable = false;
_txtdob.Click += (sender, e) =>
{
_datePickerDialog.Show();
};
_datePickerDialog = new DatePickerDialog(this, (sender, args) =>
{
_txtdob.Text = args.Date.ToString("dd/MM/yyyy");
ViewModel.NewUser.DOB = args.Date.Date;
},
DateTime.Now.Year, DateTime.Now.Month - 1, DateTime.Now.Day);
}
Here the _datePickerDialog when clicked will take the default date for today and when user selects other date it changes to the date selected by user.
Here ViewModel.NewUser.DOB = args.Date.Date; line of code takes the new date selected by user where NewUser is a property in viewmodel creating a new User with UserDto and DOB is the datetime property in UserDto.
我正在使用 xml 开发一个 xamarin android 项目,我有一个日期选择器,我想在 xml 上使用我如何为下面的日期选择器触发事件是我的 xml DatePicker 代码:
<DatePicker
android:id="@+id/DatePicker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:datePickerMode="spinner"
android:calendarViewShown="false" />
Activity代码:
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.ChangeDateTime);
hour = DateTime.Now.Hour;
minute = DateTime.Now.Minute;
date = DateTime.Now;
DateTime newDateTime;
Vm.CurrentTime = hour.ToString() + minute.ToString();
TimePicker.CurrentHour = (Java.Lang.Integer)DateTime.Now.Hour;
TimePicker.CurrentMinute = (Java.Lang.Integer)DateTime.Now.Minute;
TimePicker.TimeChanged += delegate (object sender, TimePicker.TimeChangedEventArgs e)
{
Vm.CurrentTime = e.HourOfDay.ToString() + e.Minute.ToString();
};
DatePicker.DateTime = DateTime.Now;
}
我知道您可以使用 TimePicker 为 TimePicker.TimeChanged 做一个委托,但是对于 DatePicker 呢?
如果屏幕上有按钮,您实际上可以像下面这样使用点击事件:
SomeButton.Click += (sender, e) =>
{
//Do your action here
}
好的,这(对于 .NET)的工作方式有点奇怪,但正如 Android 设计的那样。
当您调用 DatePicker 的 de Init 方法时,您传递一个 IOnDateChangedListener,并在已实现接口的 OnSelectedDayChange 函数上处理它。
如果您不自己设置委托,通常 Xamarin 实现有一个较弱的委托来处理事件,但在这种情况下,因为 Init() 方法已经需要此接口,并且假设您将始终调用该方法为了初始化日期,他们没有实现弱委托,因此没有事件。
private EditText _txtdob;
DatePickerDialog _datePickerDialog;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.sign_up);
_txtdob.Focusable = false;
_txtdob.Click += (sender, e) =>
{
_datePickerDialog.Show();
};
_datePickerDialog = new DatePickerDialog(this, (sender, args) =>
{
_txtdob.Text = args.Date.ToString("dd/MM/yyyy");
ViewModel.NewUser.DOB = args.Date.Date;
},
DateTime.Now.Year, DateTime.Now.Month - 1, DateTime.Now.Day);
}
Here the _datePickerDialog when clicked will take the default date for today and when user selects other date it changes to the date selected by user. Here ViewModel.NewUser.DOB = args.Date.Date; line of code takes the new date selected by user where NewUser is a property in viewmodel creating a new User with UserDto and DOB is the datetime property in UserDto.