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。
我正在使用 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。