calendaerView 选择一个 junary 日期崩溃应用程序

calendaerView selecting a junary date crashes app

我正在使用 CalendarView 创建一个 Xamarin 应用程序。选择日期时,除了一月份的日期外,一切都很好。任何一年的任何一天,一月份,我的应用程序崩溃,我得到 'The app has unexpectely stoppped working'.

我的XML密码是

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:minWidth="25px"
    android:minHeight="25px">
    <CalendarView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/cdrCalendar"
        android:maxDate="01/01/2026" />
    <TextView
        android:text="Medium Text"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/textView1" />
</LinearLayout>

我的 C# 代码是

namespace BitesBoardMobile.Droid
{
    class dialog_calendar : DialogFragment
    {
        private CalendarView _calendar;
        private TextView _text;
        private int _month;
        private int _year;
        private int _day;

        public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
        {
            base.OnCreateView(inflater, container, savedInstanceState);

            var view = inflater.Inflate(Resource.Layout.dialog_calendar, container, false);

            _calendar = view.FindViewById<CalendarView>(Resource.Id.cdrCalendar);
            _text = view.FindViewById<TextView>(Resource.Id.textView1);

            _calendar.DateChange += (object sender, CalendarView.DateChangeEventArgs args) =>
            {
                var newdate = new DateTime(args.Year, args.Month, args.DayOfMonth);
                _month = newdate.Month + 1;
                _year = newdate.Year;
                _day = newdate.Day;
                _text.Text = _year + "/" + _month + "/" + _day;
            };

            return view;
        }
    }
}

到目前为止我所做的只是获取选定的日期并将其放入 TextView。

他们有什么想法吗? 谢谢

查看文档:http://developer.android.com/reference/android/widget/CalendarView.OnDateChangeListener.html

month int: The month that was set [0-11].

这意味着一月是 0。但是 DateTime 构造函数需要一月为 1。所以你必须添加一个,就像你在下面添加一行一样。

_calendar.DateChange += (object sender, CalendarView.DateChangeEventArgs args) =>
{
    var newdate = new DateTime(args.Year, args.Month + 1, args.DayOfMonth);
    _text.Text = newdate.ToString("yyyy/MM/dd", CultureInfo.InvariantCulture);
};

与 .NET 中的许多东西不同,DateTime 构造函数期望它的参数基于 1,而不是基于 0。如果 Android 参数是基于 0 的,则需要将它们加 1。