Estoy creando una aplicación Xamarin utilizando elCalendarView. Al seleccionar una fecha, todo está bien, EXCEPTO para una fecha de enero. En cualquier fecha de cualquier año del mes de enero, mi aplicación falla y aparece "La aplicación ha dejado de funcionar de manera inesperada".
Mi código XML es
<?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>
Mi código C # es
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;
}
}
}
Todo lo que estoy haciendo hasta ahora es obtener la fecha seleccionada y ponerla en TextView.
¿Hay alguna idea por ahí? Gracias
Respuestas
2 para la respuesta № 1Echa un vistazo a la documentación: http://developer.android.com/reference/android/widget/CalendarView.OnDateChangeListener.html
mes int: El mes que se configuró [0-11].
Esto significa que enero es 0. Pero el DateTime
El constructor necesita 1 para enero. Por lo tanto, debe agregar uno, como lo hizo con una línea a continuación.
_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);
};
0 para la respuesta № 2
A diferencia de muchas cosas en .NET, el Fecha y hora el constructor espera que sus argumentos estén basados en 1, no en 0. Si los argumentos de Android están basados en 0, deberá agregar 1 a ellos.