C# Android DatePicker上未激发OnDateSet方法

C# Android DatePicker上未激发OnDateSet方法,c#,android,xamarin,C#,Android,Xamarin,我有下面的C代码 使用Android.App; 使用Android.Widget; 使用Android.OS; 名称空间App3 { [活动(Label=“App3”,MainLauncher=true,Icon=“@drawable/Icon”)] 公共类MainActivity:Activity,DatePickerDialog.IOnDateSetListener { 创建时受保护的覆盖无效(捆绑包) { base.OnCreate(bundle); //从“主”布局资源设置视图 SetC

我有下面的C代码

使用Android.App;
使用Android.Widget;
使用Android.OS;
名称空间App3
{
[活动(Label=“App3”,MainLauncher=true,Icon=“@drawable/Icon”)]
公共类MainActivity:Activity,DatePickerDialog.IOnDateSetListener
{
创建时受保护的覆盖无效(捆绑包)
{
base.OnCreate(bundle);
//从“主”布局资源设置视图
SetContentView(Resource.Layout.Main);
TextView myText=findviewbyd(Resource.Id.myText);
DatePicker myDatePicker=FindViewById(Resource.Id.myDatePicker);
}                      
公共void OnDateSet(日期选择器视图,整数年,整数月,整数月)
{
TextView myText=findviewbyd(Resource.Id.textWeekDay);
myText.Text=“日期更改”;
}
}    
}

我编译代码,启动应用程序。我看到我的日期选择器,在那里滚动日期,但什么也没发生。(我没有谈到OnDateSet方法中的断点。)这里可能有什么问题?

问题是OnDateSet事件是DatePickerDialog的一部分,您没有使用它。相反,您将自己的DatePicker FrameLayout直接放入布局中。但是DatePicker FrameLayout除了所有视图都具有的通用事件之外,没有任何可以订阅的事件

推荐的方法是使用完整的DatePickerDialog,对您自己的片段进行子类化,并根据单击事件显示它


看看这个例子:

我知道这很旧,但可能对其他人有用。 因此,假设在按下这样的按钮时显示
DatePickerDialog

private void DatePicker_Click(object sender, EventArgs e)
{
        Calendar cal = Calendar.Instance;
        int year = cal.Get(CalendarField.Year);
        int month = cal.Get(CalendarField.Month);
        int day = cal.Get(CalendarField.DayOfMonth);

        DatePickerDialog dialog = new DatePickerDialog(this, this, year, month, day);
        dialog.Window.SetBackgroundDrawable(new ColorDrawable(Color.Transparent));
        dialog.Show();


}
因此,当您创建
DatePickerDialog
时,您应该将
传递给构造函数的第二个参数。
因此,当您设置日期时,它正在调用您在代码中定义的
OnDateSet()
方法您的
Main.axml
看起来如何
OnDateSet
通常由
DatePickerDialog
使用,我在您的代码中找不到一个。我认为您混淆了DatePicker和DatePickerDialog。该对话框具有OnDateSet事件;选择器没有。如果我使用DatePicker.IOnDateChangedListener和OnDateChanged方法,我会遇到同样的问题。
private void DatePicker_Click(object sender, EventArgs e)
{
        Calendar cal = Calendar.Instance;
        int year = cal.Get(CalendarField.Year);
        int month = cal.Get(CalendarField.Month);
        int day = cal.Get(CalendarField.DayOfMonth);

        DatePickerDialog dialog = new DatePickerDialog(this, this, year, month, day);
        dialog.Window.SetBackgroundDrawable(new ColorDrawable(Color.Transparent));
        dialog.Show();


}