Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Panoramica
In alcuni casi un utente deve immettere dati in un'applicazione Android. Per facilitare questa operazione, il framework Android fornisce il DatePicker widget e .DatePickerDialog DatePicker consente agli utenti di selezionare l'anno, il mese e il giorno in un'interfaccia coerente tra dispositivi e applicazioni. DatePickerDialog è una classe helper che incapsula l'oggetto DatePicker in una finestra di dialogo.
Le applicazioni Android moderne devono visualizzare in DatePickerDialog un oggetto DialogFragment. Ciò consentirà a un'applicazione di visualizzare DatePicker come finestra di dialogo popup o incorporata in un'attività. Inoltre, DialogFragment gestirà il ciclo di vita e la visualizzazione della finestra di dialogo, riducendo la quantità di codice che deve essere implementata.
Questa guida illustra come usare , di cui è stato eseguito il DatePickerDialogwrapping in un oggetto DialogFragment. L'applicazione di esempio visualizzerà come DatePickerDialog finestra di dialogo modale quando l'utente fa clic su un pulsante su un'attività. Quando la data viene impostata dall'utente, verrà TextView aggiornata con la data selezionata.
Requisiti
L'applicazione di esempio per questa guida è destinata ad Android 4.1 (livello API 16) o versione successiva, ma è applicabile ad Android 3.0 (livello API 11 o versione successiva). È possibile supportare le versioni precedenti di Android con l'aggiunta della libreria di supporto Android v4 al progetto e alcune modifiche al codice.
Uso di DatePicker
Questo esempio estenderà DialogFragment. La sottoclasse ospiterà e visualizzerà un oggetto DatePickerDialog:

Quando l'utente seleziona una data e fa clic sul pulsante OK , DatePickerDialog chiama il metodo IOnDateSetListener.OnDateSet.
Questa interfaccia viene implementata dall'host DialogFragment. Se l'utente fa clic sul pulsante Annulla , il frammento e la finestra di dialogo verranno ignorati.
Esistono diversi modi per DialogFragment restituire la data selezionata all'attività di hosting:
Richiamare un metodo o impostare una proprietà : l'attività può fornire una proprietà o un metodo specificamente per l'impostazione di questo valore.
Genera un evento :
DialogFragmentpuò definire un evento che verrà generato quandoOnDateSetviene richiamato.Utilizzare un oggetto
Action:DialogFragmentpuò richiamare unAction<DateTime>oggetto per visualizzare la data nell'attività. L'attività fornirà quandoAction<DateTimesi crea un'istanza diDialogFragment. Questo esempio userà la terza tecnica e richiede che l'attività fornisca unAction<DateTime>oggetto aDialogFragment.
Estensione della finestra di dialogoFragment
Il primo passaggio nella visualizzazione di un DatePickerDialog è la sottoclasse DialogFragment e implementare l'interfaccia 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);
}
}
Il NewInstance metodo viene richiamato per creare un'istanza di un nuovo DatePickerFragmentoggetto . Questo metodo accetta un oggetto Action<DateTime> che verrà richiamato quando l'utente fa clic sul pulsante OK in DatePickerDialog.
Quando il frammento deve essere visualizzato, Android chiamerà il metodo OnCreateDialog. Questo metodo creerà un nuovo DatePickerDialog oggetto e lo inizializzerà con la data corrente e l'oggetto callback , ovvero l'istanza corrente dell'oggetto DatePickerFragment.
Nota
Tenere presente che il valore del mese in cui IOnDateSetListener.OnDateSet viene richiamato è compreso nell'intervallo da 0 a 11 e non da 1 a 12. Il giorno del mese sarà compreso nell'intervallo da 1 a 31 (a seconda del mese selezionato).
Visualizzazione di DatePickerFragment
Ora che è DialogFragment stato implementato, questa sezione esaminerà come usare il frammento in un'attività. Nell'app di esempio che accompagna questa guida, l'attività crea un'istanza dell'oggetto DialogFragment usando il NewInstance metodo factory e quindi la visualizza richiama DialogFragment.Show. Come parte della creazione DialogFragmentdi un'istanza di , l'attività passa un Action<DateTime>oggetto , che visualizzerà la data in un TextView oggetto ospitato dall'attività:
[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);
}
}
Riepilogo
Questo esempio ha illustrato come visualizzare un DatePicker widget come finestra di dialogo modale popup come parte di un'attività Android. Ha fornito un'implementazione dialogFragment di esempio e ha illustrato l'interfaccia IOnDateSetListener . In questo esempio è stato anche illustrato come DialogFragment possa interagire con l'attività host per visualizzare la data selezionata.
