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

时间:2016-04-04 21:33:01

标签: c# xamarin visual-studio-2015 calendarview

我正在使用CalendarView创建一个Xamarin应用程序。选择日期时,除1月份日期外,一切都很好。在1月份的任何一年中我的应用程序崩溃的任何日期,我得到的应用程序已经无法正常停止工作'。

我的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。

他们有什么想法吗? 感谢

2 个答案:

答案 0 :(得分:2)

查看文档:{​​{3}}

  

month int:设置为[0-11]的月份。

这意味着1月为0.但是DateTime构造函数需要1月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);
};

答案 1 :(得分:0)

与.NET中的许多内容不同,DateTime构造函数要求它的参数是基于1而不是基于0。如果Android参数为0,则需要为它们添加1。