Редактирование данных курсора до того, как ListAdapter отобразит их в ListView - PullRequest
2 голосов
/ 28 августа 2010

Сначала я получаю информацию из базы данных SQLite в курсор.

Курсор содержит столбец отметки времени в формате: yyyy-MM-dd HH:mm:ss.SSS, например, 2010-08-27 21:25:30.575

После извлечения,Я установил SimpleCursorAdapter следующим образом:Формат ГГГГ (или, возможно, формат пользователя, основанный на локали, если это возможно).

Как я могу вмешаться с SimpleCursorAdapter, чтобы изменить дату на мой предпочитаемый формат?

NBЯ хотел бы изменить способ передачи информации в адаптер, если это упрощает ситуацию.Я также не возражаю против изменения запроса SQLite для курсора, если SQLite имеет встроенный форматер.

Ответы [ 3 ]

1 голос
/ 02 сентября 2010

Это было мое окончательное решение.

Обратите внимание, что это хак, который заставляет SQLite переформатировать дату получения. Лучшим решением было бы сохранить дату и извлечь ее самостоятельно.

Есть поля для ключей поиска:

public static final String KEY_TIMESTAMP = "timestamp";
public static final String KEY_DATESTAMP = 
              "strftime('%d/%m/%Y'," + KEY_TIMESTAMP +")";

Сохраните отметку времени как обычно в записи базы данных:

String timeStamp = new Timestamp( 
                Calendar.getInstance().getTimeInMillis() ).toString();

ContentValues initialValues = new ContentValues();
...
initialValues.put(KEY_TIMESTAMP, timeStamp);

return mDb.insert(DATABASE_TABLE, null, initialValues);

Где mDb - объект SQLiteDatabase.

При получении метки времени в формате yyyy-MM-dd HH:mm:ss.SSS используйте обычный KEY_TIMESTAMP.

Следующий метод извлекает строку с обоими элементами. Используйте соответствующий ключ для поиска.

public Cursor fetchItem(long rowId) throws SQLException {
        Cursor cursor =
                mDb.query(true, DATABASE_TABLE, 
                        new String[] {KEY_ITEMID,KEY_TIMESTAMP,KEY_DATESTAMP},
                        KEY_ITEMID + "=" + rowId, 
                        null, null, null, null, null
                );
        return cursor;
}

Используйте соответствующий ключ для поиска

mTimestamp = quote.getString(
                quote.getColumnIndex(QuotesDbAdapter.KEY_TIMESTAMP)));
mDatestamp = quote.getString(
                    quote.getColumnIndex(QuotesDbAdapter.KEY_DATESTAMP)));
1 голос
/ 28 августа 2010

Способ запроса:

SELECT strftime('%d/%m/%Y',TimeStampField) FROM MyTable...

Поскольку SQLite будет возвращать строки для всех полей, вам нужно будет выполнить для SimpleCursorAdaptor анализ даты и ее преобразование.Я испытываю желание сказать, что проще и понятнее сделать это с помощью SQLite.

0 голосов
/ 03 января 2011

Форматирование даты также можно выполнить с помощью класса ViewBinder.Хороший пример здесь: http://ambiguiti.es/2009/04/making-custom-rows-in-android-listviews/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...