Изменение данных SimpleCursorAdapter - PullRequest
16 голосов
/ 24 января 2011

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

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?

1 Ответ

28 голосов
/ 24 января 2011

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

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