Remarque
L’accès à cette page requiert une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page requiert une autorisation. Vous pouvez essayer de modifier des répertoires.
Vue d’ensemble
Il arrive qu’un utilisateur doit entrer des données dans une application Android. Pour y remédier, l’infrastructure Android fournit le DatePicker widget et le DatePickerDialog . Permet DatePicker aux utilisateurs de sélectionner l’année, le mois et le jour dans une interface cohérente entre les appareils et les applications. est DatePickerDialog une classe d’assistance qui encapsule le DatePicker dans une boîte de dialogue.
Les applications Android modernes doivent afficher le DatePickerDialog dans un DialogFragment. Cela permet à une application d’afficher le DatePicker en tant que boîte de dialogue contextuelle ou incorporé dans une activité. En outre, le DialogFragment gère le cycle de vie et l’affichage de la boîte de dialogue, ce qui réduit la quantité de code qui doit être implémentée.
Ce guide montre comment utiliser , DatePickerDialogencapsulé dans un DialogFragment. L’exemple d’application affiche le DatePickerDialog sous forme de boîte de dialogue modale lorsque l’utilisateur clique sur un bouton sur une activité. Lorsque la date est définie par l’utilisateur, une TextView mise à jour est effectuée avec la date sélectionnée.
Spécifications
L’exemple d’application de ce guide cible Android 4.1 (niveau API 16) ou supérieur, mais s’applique à Android 3.0 (niveau d’API 11 ou supérieur). Il est possible de prendre en charge des versions antérieures d’Android avec l’ajout de la bibliothèque de support Android v4 au projet et quelques modifications de code.
Utilisation du DatePicker
Cet exemple étend DialogFragment. La sous-classe hébergera et affichera un DatePickerDialog:
Lorsque l’utilisateur sélectionne une date et clique sur le bouton OK , le DatePickerDialog appelle la méthode IOnDateSetListener.OnDateSet.
Cette interface est implémentée par l’hébergement DialogFragment. Si l’utilisateur clique sur le bouton Annuler , le fragment et la boîte de dialogue se désactivent.
Il existe plusieurs façons de DialogFragment renvoyer la date sélectionnée à l’activité d’hébergement :
Appeler une méthode ou définir une propriété : l’activité peut fournir une propriété ou une méthode spécifiquement pour définir cette valeur.
Déclencher un événement :
DialogFragmentpeut définir un événement qui sera déclenché lorsOnDateSetde l’appel.Utiliser un
ActionDialogFragment: peut appeler unAction<DateTime>pour afficher la date dans l’activité. L’activité fournit le lors de l’instanciationAction<DateTimede .DialogFragmentCet exemple utilise la troisième technique et exige que l’activité fournisse unAction<DateTime>auDialogFragment.
Extension de DialogFragment
La première étape de l’affichage d’un DatePickerDialog consiste à sous-classer DialogFragment et à implémenter l’interface 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);
}
}
La NewInstance méthode est appelée pour instancier un nouveau DatePickerFragment. Cette méthode prend un Action<DateTime> qui sera appelé lorsque l’utilisateur clique sur le bouton OK dans le DatePickerDialog.
Lorsque le fragment doit être affiché, Android appelle la méthode OnCreateDialog. Cette méthode crée un DatePickerDialog objet et l’initialise avec la date actuelle et l’objet de rappel (qui est le instance actuel de ).DatePickerFragment
Notes
N’oubliez pas que la valeur du mois où IOnDateSetListener.OnDateSet est appelé est comprise entre 0 et 11, et non 1 à 12. Le jour du mois sera dans la plage de 1 à 31 (selon le mois sélectionné).
Affichage du DatePickerFragment
Maintenant que le DialogFragment a été implémenté, cette section examine comment utiliser le fragment dans une activité. Dans l’exemple d’application qui accompagne ce guide, l’activité instancie le à l’aide de DialogFragment la NewInstance méthode factory, puis l’affiche en appelant DialogFragment.Show. Dans le cadre de l’instanciation du DialogFragment, l’activité passe un Action<DateTime>, qui affiche la date dans un TextView qui est hébergé par l’activité :
[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);
}
}
Résumé
Cet exemple explique comment afficher un DatePicker widget en tant que boîte de dialogue modale contextuelle dans le cadre d’une activité Android. Il a fourni un exemple d’implémentation DialogFragment et a discuté de l’interface IOnDateSetListener . Cet exemple a également montré comment dialogfragment peut interagir avec l’activité hôte pour afficher la date sélectionnée.