16

Я работаю над приложением TV Guide, которое использует ListActivity, показывающее телешоу для одного канала/один день за раз. Я использую RelativeLayout для ListView элементов, и я хочу ListView выглядеть примерно так:Изменение данных SimpleCursorAdapter

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

я получаю данные для ListView элементов, используя следующий код:

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

Моей проблемы является то, что start_time поле представляет собой datetime в следующем формате:

2011-01-23 07:00:00 

так что я получаю это:

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 

То, что я хотел бы сделать, это отформатировать выше, используя SimpleDateFormat ("HH:mm"), поэтому я только получаю hour:minute часть start_time поля.

Я нашел интерфейс SimpleCursor.ViewBinder, который предполагает, что это может быть то, что я хочу, но я не могу понять, как его использовать. Если я прав около ViewBinder, я был бы признателен за некоторые указатели на пример кода о том, как его использовать. В противном случае, как еще я могу добиться изменения поля start_time, чтобы просто показать формат HH:mm?

ответ

28

Вы можете сделать что-то вроде этого:

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

Спасибо, что объясняет это очень хорошо. Я переработал ваш пример, чтобы соответствовать моему коду, и он отлично работает для меня. – Squonk

+1

Это только что спасло мою задницу, пытаясь переупорядочить количество строк из курсора, так что спасибо вам, сэр. Мой код выглядит следующим образом: HistoryAdapter.setViewBinder (новый SimpleCursorAdapter.ViewBinder() { \t \t \t @Override \t \t \t общественного логический setViewValue (Просмотр вид, Cursor курсор, внутр столбец) { \t \t \t \t если (столбец == 0) {// давайте предположим, что столбец 0 является \t \t \t \t \t \t \t \t \t // дата \t \t \t \t \t TextView tv = (TextView) view; \t \t \t \t \t String rownum = String.valueOf (cursor.getPosition() + 1); \t \t \t \t \t // здесь использовать SimpleDateFormat для бла-бла-бла \t \t \t \t \t телевизор.SetText (ROWNUM); \t \t \t \t \t return true; \t \t \t \t} \t \t \t \t возвращение ложным; \t \t \t} \t \t}); –

+0

@Cristian. Как вы думаете, вы могли бы помочь с этим http://stackoverflow.com/questions/27257416/android-how-can-i-pass-data-related-to-two-tables-to-a-the -insert-метод в своем? – eddy

 Смежные вопросы

  • Нет связанных вопросов^_^