Attualmente sto costruendo la mia prima app per Android. Quello che sto avendo problemi è la memorizzazione e la visualizzazione localizzata delle date in connessione con uno SimpleCursorAdapter
. Ho una classe che incapsula l'accesso a un SQLitedatabase
con tre tabelle. Questa classe si occupa di memorizzare tutte le date in formato ISO ("aaaa-MM-gg"). Quando i valori della data vengono letti dal database e visualizzati sullo schermo, voglio che siano formattati in un formato localizzato. Ecco l'approccio che ho trovato. Esso utilizza una ViewBinder
di fare la formattazione:Visualizzazione delle date in formato localizzato su Android
adapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() {
@Override
public boolean setViewValue(View view, Cursor cursor,
int columnIndex) {
if (view.getId() == R.id.text1) {
((TextView) view).setText(getDateFormatView().format(
parseDatabaseDate(cursor.getString(columnIndex))));
return true;
} else if (view.getId() == R.id.text2) {
((TextView)view).setText(
cursor.getString(columnIndex));
return true;
} else {
return false;
}
}
});
getDateFormatView()
crea un oggetto SimpleDateFormat
con un modello che viene letta da strings.xml
. parseDatabaseDate()
esegue l'analisi della data dal database con un che viene creato utilizzando un modello costante yyyy-MM-dd
.
Anche se questo codice funziona bene, mi chiedo se c'è un modo migliore per farlo. Quello che non mi piace è che ho bisogno:
- due
SimpleDateFormat
oggetti (uno è usato inparseDatabaseDate()
al fine di analizzare la stringa data dalSQLiteDatabase
, l'altro è usato per formattare il valore) - un
java.util.Date
oggetto che viene creato e poi gettato immediatamente - un bel po '(a mio avviso) codice boilerplate.
Ecco perché sto chiedendo: c'è un modo migliore per visualizzare le date in formato localizzato?
Daniele, grazie per questo. Devo ancora familiarizzare con le classi di Google che sostituiscono le comuni classi Java, come android.text.format.DateFormat. Anche l'uso dei long per lo storage è un'ottima idea. Che dovrebbe funzionare per questa applicazione specifica, che sicuramente non ha bisogno di memorizzare le date prima del 1970. –
Il codice dato da Daniel è teoricamente corretto, ma devo fare alcune modifiche, invece, e renderlo essere questo: ((TextView) Vista) .setText (android.text.format.DateFormat.getDateFormat (Class.this) .format (new Date (cursor.getLong (columnIndex)))); – okysabeni