Le persone formattano le informazioni sulla data in una varietà di modi e questo rende la raccolta di informazioni sulle date grezzi dagli utenti un po 'complicate. Il modo migliore per garantire dati validi è fornire un controllo che impone determinate regole su come viene formattata una data. Un modo per farlo è utilizzando una finestra di dialogo data speciale per raccogliere input.
Le finestre di dialogo della data, come quella mostrata sotto, sono generate da una speciale classe AlertDialog chiamata DatePickerDialog (android.app.DatePickerDialog). Oltre a disporre di tutte le funzionalità della classe AlertDialog, è possibile utilizzare DatePickerDialog per raccogliere dati di input standardizzati dall'utente. In questo breve tutorial, forniamo i passaggi necessari per implementare una finestra di selezione data per raccogliere una data (ad esempio un compleanno) dall'utente.
Abbiamo già discusso su come aggiungere i controlli di base della finestra di dialogo alle tue classi di attività. Questo rapido tutorial si basa sulle tue conoscenze dal tutorial Esercitazione su interfaccia utente Android: Esercitazione con le finestre di dialogo. È possibile aggiungere questa finestra di dialogo all'applicazione di esempio della finestra di dialogo fornita nel tutorial sopra menzionato o creare la propria applicazione.
Ora aggiungiamo un'altra nuova finestra di dialogo alla tua classe di attività di base.
Modifica la tua classe Java Activity e aggiungi le seguenti variabili membro:
private static final int MY_DATE_DIALOG_ID = 3;
Questo codice definisce un identificatore di finestra di dialogo univoco per la nostra classe di attività. Il valore è arbitrario, ma deve essere univoco all'interno dell'attività.
Per creare istanze di dialogo, è necessario fornire un caso per DatePickerDialog nel metodo onCreateDialog () della classe Activity. Quando viene chiamato il metodo showDialog (), attiva una chiamata a questo metodo, che deve restituire l'istanza della finestra di dialogo appropriata. Nel codice di esempio abbiamo tre diversi Dialoghi nella nostra classe e quindi dovremo controllare l'identificatore della finestra di dialogo in entrata per restituire la finestra di dialogo del tipo appropriato.
La specifica case statement per il tuo nuovo DatePickerDialog all'interno del metodo onCreateDialog () è mostrata qui:
case MY_DATE_DIALOG_ID: DatePickerDialog dateDlg = new DatePickerDialog (questo, nuovo DatePickerDialog.OnDateSetListener () public void onDateSet (DatePicker view, int anno, int monthOfYear, int dayOfMonth) Time chosenDate = new Time (); chosenDate.set (dayOfMonth, monthOfYear , anno); long dtDob = chosenDate.toMillis (true); CharSequence strDate = DateFormat.format ("MMMM dd, yyyy", dtDob); Toast.makeText (SuperSimpleDialogsActivity.this, "Data di selezione:" + strDate, Toast.LENGTH_SHORT ) .show ();, 2011,0, 1); dateDlg.setMessage ("Quando è il tuo compleanno?"); return dateDlg;
Qui creiamo una nuova istanza di DatePickerDialog, la configuro e la restituiamo. La configurazione è semplice Includiamo un'implementazione del metodo onDateSet (), che viene chiamato quando l'utente seleziona una data specifica e preme il pulsante di dialogo positivo. Impostiamo anche il messaggio della finestra di dialogo per richiedere all'utente una data di nascita.
Nota: utilizziamo la classe Time (android.text.format.Time) e la classe DateFormat (android.text.format.DateFormat) per convertire tra i formati di dati leggibili da macchina e umani.
Ricorda che un'attività mantiene i dialoghi in giro e li riutilizza ogni volta che vengono mostrati. Poiché vogliamo inizializzare DatePickerDialog alla data odierna, dovremmo inizializzarlo nel metodo onPrepareDialog () dell'attività. In caso contrario, la seconda volta che avvii DatePickerDialog, verrà impostato sulla data scelta la volta precedente. Supponiamo di voler riutilizzare questa finestra di dialogo, quindi vogliamo ripristinarla alla data corrente ogni volta che viene visualizzata la finestra di dialogo. Per fare ciò, dobbiamo aggiornare il metodo onPrepareDialog () dell'attività. Ecco la dichiarazione del caso per lo specifico DatePickerDialog all'interno di questo metodo:
case MY_DATE_DIALOG_ID: DatePickerDialog dateDlg = (DatePickerDialog) dialog; int iDay, iMonth, iYear; Calendar cal = Calendar.getInstance (); iDay = cal.get (Calendar.DAY_OF_MONTH); iMonth = cal.get (Calendar.MONTH); iYear = cal.get (Calendar.YEAR); dateDlg.updateDate (iYear, iMonth, iDay); rompere;
Qui usiamo la classe Calendar (java.util.Calendar) per impostare il controllo DatePickerDialog sulla data odierna ogni volta che la finestra di dialogo viene mostrata con il metodo updateDate (). Si noti che il valore del mese è un numero di mese basato su 0 (cioè ottobre sarà il mese 9, non il mese 10).
Infine, sei pronto per attivare DatePickerDialog per visualizzare come richiesto. Ad esempio, potresti aggiungere un altro controllo Button alla schermata della tua attività per attivare DatePickerDialog da visualizzare. Il suo gestore di clic potrebbe essere simile a questo:
public void onDateDialogButtonClick (View v) showDialog (MY_DATE_DIALOG_ID);
Le finestre di dialogo sono un potente strumento di interfaccia utente che può aiutarti a mantenere l'interfaccia utente dell'applicazione flessibile e senza fronzoli. DatePickerDialogs sono particolarmente utili per la raccolta di input di data dall'utente in modo riproducibile e standardizzato. Un DatePickerDialog è un tipo speciale di AlertDialog con tutte le sue caratteristiche.
Gli sviluppatori mobili Lauren Darcey e Shane Conder hanno coautore diversi libri sullo sviluppo di Android: un libro di programmazione approfondito intitolato Sviluppo di applicazioni wireless Android, seconda edizione e Sams ti insegna a sviluppare applicazioni Android in 24 ore, seconda edizione. Quando non scrivono, passano il loro tempo a sviluppare software mobile presso la loro azienda ea fornire servizi di consulenza. Possono essere contattati via email a [email protected], tramite il loro blog su androidbook.blogspot.com e su Twitter @androidwireless.
я я