Я работаю над проектом Android xamarin с использованием xml, и у меня есть datepicker, который я хочу использовать в xml, как мне запустить событие для datepicker ниже, это мой xml-код для DatePicker:

    <DatePicker
        android:id="@+id/DatePicker"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:datePickerMode="spinner"
        android:calendarViewShown="false" />

Код деятельности:

    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?

1
user5530425 5 Янв 2016 в 03:17

3 ответа

Лучший ответ

На самом деле вы можете просто использовать событие щелчка, как показано ниже, если у вас есть кнопка на этом экране:

SomeButton.Click += (sender, e) =>
{
    //Do your action here

}
0
yams 5 Янв 2016 в 00:33
 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);
}

Здесь _datePickerDialog при нажатии примет дату по умолчанию для сегодняшнего дня, а когда пользователь выберет другую дату, она изменится на дату, выбранную пользователем. Здесь ViewModel.NewUser.DOB = args.Date.Date; строка кода принимает новую дату, выбранную пользователем, где NewUser - это свойство в модели просмотра, создающее нового пользователя с UserDto, а DOB - это свойство datetime в UserDto.

0
Ruchira 13 Янв 2017 в 11:43

Хорошо, это немного странно в том, как это работает (для .NET), но так, как был разработан Android.

Когда вы вызываете метод инициализации DatePicker, вы передаете IOnDateChangedListener, а в функции OnSelectedDayChange реализованного интерфейса вы его обрабатываете.

Обычно реализации Xamarin имеют слабый elegate для обработки событий, если вы не устанавливаете делегат самостоятельно, но в этом случае, поскольку для метода Init () уже требуется этот интерфейс, и предполагается, что вы всегда будете вызывать этот метод для инициализации даты, они не реализовали слабый делегат и, следовательно, нет событий.

0
Gusman 5 Янв 2016 в 00:43