Cambio de valores desde Cursor mediante SimpleCursorAdapter

Tengo una tabla de base de datos con las columnas {Nombre, Hora (formato UTC), Latitud, Longitud}

Muestra la tabla usando un ListActivity con un SimpleCursorAdapter.

Me gustaría que la columna Tiempo mostrar la hora en un formato legible por humanos (13-07-2010 10:40) en lugar de en formato UTC (18190109089).

¿Cómo puedo especificar que los valores de la columna Tiempo necesitan algún filtrado / adaptación?

POSIBLE SOLUCIÓN (con un problema):

SimpleCursorAdapter ofrece el método:

setCursorToStringConverter(SimpleCursorAdapter.CursorToStringConverter cursorToStringConverter); 

Para especificar cómo una clase que es capaz de convertir un Cursor a CharSequence (convertToString (Cursor cursor). De todos modos no sé en qué formato debe ser el parámetro CharSequence de retorno!


La forma más sencilla de formatear un valor de cursor es usar SimpleCursorAdapter.setViewBinder (..):

 SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.list, cursor, new String[] { Definition.Item.TITLE, Definition.Item.CREATE_DATE }, new int[] { R.id.title, R.id.createDate}); adapter.setViewBinder(new ViewBinder() { public boolean setViewValue(View aView, Cursor aCursor, int aColumnIndex) { if (aColumnIndex == 2) { String createDate = aCursor.getString(aColumnIndex); TextView textView = (TextView) aView; textView.setText("Create date: " + MyFormatterHelper.formatDate(getApplicationContext(), createDate)); return true; } return false; } }); 

También tuve el mismo problema después de una larga lucha por fin encontré respuesta 🙂 (ver más abajo)

 use setViewText (TextView v, String text) 

por ejemplo

 SimpleCursorAdapter shows = new SimpleCursorAdapter(this, R.layout.somelayout, accountCursor, from, to) { @Override public void setViewText(TextView v, String text) { super.setViewText(v, convText(v, text)); } }; private String convText(TextView v, String text) { switch (v.getId()) { case R.id.date: String formatedText = text; //do format return formatedText; } return text; } 

Puede utilizar setViewBinder() o subclase SimpleCursorAdapter y reemplazar bindView() .

Puede utilizar la sintaxis de SQLite en esa columna para formatear la fecha.

Algo como esto lo hará

 SELECT strftime('%d-%m-%Y %H:%M',1092941466,'unixepoch'); SELECT strftime('%d-%m-%Y %H:%M',timecol,'unixepoch'); 
  • Obtención del siguiente valor AUTO_INCREMENT de una base de datos SQLite
  • Obtención del tipo de una columna en SQLite
  • Android SQLite ON CONFLICT UPDATE es posible?
  • HTML5 Webapp como icono o aplicación regular en iPhone y Android.
  • Java.sql.SQLException: No se puede ejecutar insert stmt en objeto
  • Alcanzó el tamaño MAX para la caché de instrucciones compiladas-sql para la base de datos
  • DB SQLite de Android Cuando cerrar
  • Cómo utilizar correctamente claves foráneas en Android, utilizando SQLite y OrmLite
  • Resolución de conflictos en la base de datos SQLite de Android
  • Inspeccionar android sqlite y IntelliJ
  • ¿Cómo puedo hacer un contexto de base de datos SQLite nulo en OnDestroy () en Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.