Selektor dat systemu Android
Omówienie
Czasami użytkownik musi wprowadzić dane do aplikacji systemu Android. Aby to ułatwić, platforma systemu Android udostępnia DatePicker
widżet i .DatePickerDialog
Funkcja DatePicker
umożliwia użytkownikom wybieranie roku, miesiąca i dnia w spójnym interfejsie między urządzeniami i aplikacjami. Jest DatePickerDialog
to klasa pomocnika, która hermetyzuje element DatePicker
w oknie dialogowym.
Nowoczesne aplikacje dla systemu Android powinny wyświetlać element DatePickerDialog
w elem.DialogFragment
Pozwoli to aplikacji na wyświetlanie kontrolki DatePicker jako okna podręcznego lub osadzonego w działaniu. Ponadto DialogFragment
program będzie zarządzać cyklem życia i wyświetlaniem okna dialogowego, zmniejszając ilość kodu, który należy zaimplementować.
W tym przewodniku pokazano, jak używać elementu DatePickerDialog
, opakowanego w obiekcie DialogFragment
. Przykładowa aplikacja wyświetli DatePickerDialog
jako modalne okno dialogowe, gdy użytkownik kliknie przycisk w działaniu. Gdy data zostanie ustawiona przez użytkownika, TextView
zostanie zaktualizowana z wybraną datą.
Wymagania
Przykładowa aplikacja tego przewodnika dotyczy systemu Android 4.1 (poziom 16 interfejsu API) lub nowszego, ale ma zastosowanie do systemu Android 3.0 (poziom interfejsu API 11 lub nowszy). Istnieje możliwość obsługi starszych wersji systemu Android z dodatkiem biblioteki obsługi systemu Android w wersji 4 do projektu i niektórych zmian w kodzie.
Korzystanie z platformy DatePicker
Ten przykład rozszerzy usługę DialogFragment
. Podklasa będzie hostować i wyświetlać element DatePickerDialog
:
Gdy użytkownik wybierze datę i kliknie przycisk OK , DatePickerDialog
wywoła metodę IOnDateSetListener.OnDateSet
.
Ten interfejs jest implementowany przez hosting DialogFragment
. Jeśli użytkownik kliknie przycisk Anuluj , fragment i okno dialogowe zostaną odrzucone.
Istnieje kilka sposobów, w jaki DialogFragment
można zwrócić wybraną datę do działania hostingu:
Wywołaj metodę lub ustaw właściwość — działanie może dostarczyć właściwość lub metodę specjalnie do ustawiania tej wartości.
Zgłoś zdarzenie —
DialogFragment
może zdefiniować zdarzenie, które zostanie zgłoszone poOnDateSet
wywołaniu.Użyj elementu
Action
—DialogFragment
obiekt może wywołać element ,Action<DateTime>
aby wyświetlić datę w działaniu. Działanie spowoduje udostępnienieAction<DateTime
wystąpienia elementuDialogFragment
. W tym przykładzie zostanie użyta trzecia technika i będzie wymagać, aby działanie dostarczało elementAction<DateTime>
do elementuDialogFragment
.
Rozszerzanie okna dialogowegoFragment
Pierwszym krokiem wyświetlania elementu DatePickerDialog
jest podklasa DialogFragment
i zaimplementowanie interfejsu IOnDateSetListener
:
public class DatePickerFragment : DialogFragment,
DatePickerDialog.IOnDateSetListener
{
// TAG can be any string of your choice.
public static readonly string TAG = "X:" + typeof (DatePickerFragment).Name.ToUpper();
// Initialize this value to prevent NullReferenceExceptions.
Action<DateTime> _dateSelectedHandler = delegate { };
public static DatePickerFragment NewInstance(Action<DateTime> onDateSelected)
{
DatePickerFragment frag = new DatePickerFragment();
frag._dateSelectedHandler = onDateSelected;
return frag;
}
public override Dialog OnCreateDialog(Bundle savedInstanceState)
{
DateTime currently = DateTime.Now;
DatePickerDialog dialog = new DatePickerDialog(Activity,
this,
currently.Year,
currently.Month - 1,
currently.Day);
return dialog;
}
public void OnDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth)
{
// Note: monthOfYear is a value between 0 and 11, not 1 and 12!
DateTime selectedDate = new DateTime(year, monthOfYear + 1, dayOfMonth);
Log.Debug(TAG, selectedDate.ToLongDateString());
_dateSelectedHandler(selectedDate);
}
}
Metoda NewInstance
jest wywoływana w celu utworzenia wystąpienia nowego DatePickerFragment
elementu . Ta metoda przyjmuje metodę Action<DateTime>
, która zostanie wywołana, gdy użytkownik kliknie przycisk OK w elemecie DatePickerDialog
.
Gdy fragment ma być wyświetlany, system Android wywoła metodę OnCreateDialog
. Ta metoda utworzy nowy DatePickerDialog
obiekt i zainicjuje go przy użyciu bieżącej daty i obiektu wywołania zwrotnego (który jest bieżącym wystąpieniem DatePickerFragment
obiektu ).
Uwaga
Należy pamiętać, że wartość miesiąca wywoływanego IOnDateSetListener.OnDateSet
wynosi od 0 do 11, a nie od 1 do 12. Dzień miesiąca będzie mieścić się w zakresie od 1 do 31 (w zależności od wybranego miesiąca).
Wyświetlanie elementu DatePickerFragment
Teraz, gdy element DialogFragment
został zaimplementowany, w tej sekcji dowiesz się, jak używać fragmentu w działaniu. W przykładowej aplikacji, która towarzyszy temu przewodnikowi, działanie utworzy wystąpienie DialogFragment
metody factory, NewInstance
a następnie wyświetli wywołanie DialogFragment.Show
metody . W ramach tworzenia wystąpienia DialogFragment
elementu działanie przekazuje Action<DateTime>
wartość , która będzie wyświetlać datę w obiekcie hostowanym TextView
przez działanie:
[Activity(Label = "@string/app_name", MainLauncher = true, Icon = "@drawable/icon")]
public class MainActivity : Activity
{
TextView _dateDisplay;
Button _dateSelectButton;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.Main);
_dateDisplay = FindViewById<TextView>(Resource.Id.date_display);
_dateSelectButton = FindViewById<Button>(Resource.Id.date_select_button);
_dateSelectButton.Click += DateSelect_OnClick;
}
void DateSelect_OnClick(object sender, EventArgs eventArgs)
{
DatePickerFragment frag = DatePickerFragment.NewInstance(delegate(DateTime time)
{
_dateDisplay.Text = time.ToLongDateString();
});
frag.Show(FragmentManager, DatePickerFragment.TAG);
}
}
Podsumowanie
W tym przykładzie omówiono sposób wyświetlania widżetu DatePicker
jako okna dialogowego modalnego wyskakującego w ramach działania systemu Android. Udostępniono przykładową implementację DialogFragment i omówiono IOnDateSetListener
interfejs. W tym przykładzie pokazano również, jak aplikacja DialogFragment może wchodzić w interakcje z działaniem hosta w celu wyświetlenia wybranej daty.