16

Pracuję nad aplikacją TV Guide, która używa ListActivity, pokazując programy telewizyjne dla jednego kanału/jednego dnia na raz. Używam RelativeLayout dla ListView przedmiotów i chcę ListView wyglądać mniej więcej tak:Modyfikowanie danych SimpleCursorAdapter

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

mogę uzyskać dane dla ListView elementów za pomocą następującego kodu:

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); 

mój problem to, że pole start_time jest datetime z następującym formacie:

2011-01-23 07:00:00 

więc co mam to:

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 

Co chciałbym zrobić to sformatować powyżej używając SimpleDateFormat ("HH:mm"), więc tylko dostać hour:minute część pola start_time.

Znalazłem interfejs SimpleCursor.ViewBinder sugerujący, że może być to, czego chcę, ale nie mogę wymyślić, jak z niego korzystać. Jeśli mam rację co do numeru ViewBinder, doceniam kilka wskazówek, które podpowiedzą, jak go użyć. W przeciwnym razie, w jaki inny sposób mogę uzyskać zmianę pola start_time, aby wyświetlić po prostu format HH:mm?

Odpowiedz

28

można zrobić coś takiego:

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

Dziękuję, że wyjaśnia to bardzo dobrze. Ponownie opracowałem twój przykład, aby pasował do mojego kodu i działa on idealnie dla mnie. – Squonk

+1

To właśnie uratowało mój tyłek, próbując zmienić kolejność wierszy z kursora, więc dziękuję panu. Mój kod wygląda następująco: HistoryAdapter.setViewBinder (nowa SimpleCursorAdapter.ViewBinder() { \t \t \t @Override \t \t \t public boolean setViewValue (Widok, Kursor Kursor, int kolumna) { \t \t \t \t if (kolumna == 0) {// załóżmy że kolumna 0 jest \t \t \t \t \t \t \t \t \t // data \t \t \t \t \t Widok TextView tv = (widok tekstu); \t \t \t \t \t String rownum = String.valueOf (cursor.getPosition() + 1); \t \t \t \t \t // tu użyć SimpleDateFormat do 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 powrotu fałszywe; \t \t \t} \t \t}); –

+0

@Cristian Proszę, myślisz, że możesz pomóc w tym http://stackoverflow.com/questions/27257416/android-how-can-i-pass-data-related-to-two-tables-to-a-hehe -insert-method-of-a? – eddy

Powiązane problemy