16

Sto lavorando a un'applicazione TV Guide che utilizza uno ListActivity che mostra i programmi TV per un canale/un giorno alla volta. Io sto usando un RelativeLayout per le ListView voci e voglio il ListView di simile a questa:Modifica dei dati di SimpleCursorAdapter

07:00 The Breakfast Show 
     Latest news and topical reports 
08:00 Tom and Jerry 
     More cat and mouse capers 

ottengo i dati relativi agli ListView elementi utilizzando il seguente codice:

Cursor cursor = db.rawQuery(SELECT blah,blah,blah); 
String[] columnNames = new String[]{"start_time","title", "subtitle"}; 
int[] resIds = new int[]{R.id.start_time_short, R.id.title, R.id.subtitle}; 
adapter = new SimpleCursorAdapter(this, R.layout.guide_list_item, cursor, columnNames, resIds); 

Il mio problema è che il campo start_time è un datetime con il seguente formato:

2011-01-23 07:00:00 

così quello che ottengo è questo:

2011-01-23 07:00:00 The Breakfast Show 
        Latest news and topical reports 
2011-01-23 08:00:00 Tom and Jerry 
        More cat and mouse capers 

Quello che mi piacerebbe fare è formattare il sopra utilizzando SimpleDateFormat ("HH:mm") quindi ho solo ottenere la parte hour:minute del campo start_time.

Ho trovato l'interfaccia SimpleCursor.ViewBinder che suggerisce che potrebbe essere quello che voglio ma non riesco a capire come usarlo. Se ho ragione a proposito di ViewBinder, gradirei alcuni suggerimenti per l'esempio del codice su come usarlo. Altrimenti, in quale altro modo è possibile ottenere la modifica del campo start_time per mostrare semplicemente il formato HH:mm?

risposta

28

si può fare qualcosa di simile:

adapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() { 
    @Override 
    public boolean setViewValue(View view, Cursor cursor, int column) { 
     if(column == 0){ // let's suppose that the column 0 is the date 
      TextView tv = (TextView) view; 
      String dateStr = cursor.getString(cursor.getColumnIndex("name_of_the_date_column")); 
      // here you use SimpleDateFormat to bla blah blah 
      tv.setText(theFormatedDate); 
      return true; 
     } 
     return false; 
    } 
}); 
+0

Grazie, che spiega molto bene. Ho rielaborato il tuo esempio per adattarlo al mio codice e funziona perfettamente per me. – Squonk

+1

Questo mi ha appena salvato il culo cercando di riordinare i conteggi delle righe da un Cursore, quindi grazie signore. Il mio codice è il seguente: HistoryAdapter.setViewBinder (nuova SimpleCursorAdapter.ViewBinder() { \t \t \t @Override \t \t \t pubblico setViewValue booleana (Panorama vista, cursore Cursore, int column) { \t \t \t \t if (colonna == 0) {// supponiamo che la colonna 0 è il \t \t \t \t \t \t \t \t \t // data 012.\t \t \t \t \t TextView tv = (Vista TextView); \t \t \t \t \t String rownum = String.valueOf (cursor.getPosition() + 1); \t \t \t \t \t // qui si utilizza SimpleDateFormat di bla bla bla \t \t \t \t \t tv.setText (rownum); \t \t \t \t \t return true; \t \t \t \t} \t \t \t \t return false; \t \t \t} \t \t}); –

+0

@Cristian Per favore, pensi di poterti aiutare con questo http://stackoverflow.com/questions/27257416/android-how-can-i-passa-data-related-to-two-tables-to-a-the -Inserire-metodo-di-un? – eddy

Problemi correlati