Проблема преобразования времени из базы данных в ListView - PullRequest
0 голосов
/ 12 августа 2011

Мне нужно преобразовать поле времени (миллисекунды) из базы данных в "MMM dd, yyyy HH: mm" и список, который приводит к просмотру списка в порядке возрастания, и у меня возникли проблемы с отображением DateTime на моем Посмотреть список. Вот код, который я использую:

DB:

public Cursor getUserDateTimeLocations(long rowId) throws SQLException
        {
        Cursor mCursor =
            db.query(true, DATABASE_TABLE_LOCATION, new String[] {KEY_ROWID,
                    KEY_LATITUDE, KEY_LONGITUDE, KEY_DATETIME,KEY_USERID,KEY_OBS}, KEY_USERID + "=" + rowId, null,
                    null, null, null, null);
        if (mCursor != null) {
            mCursor.moveToFirst();
        }
        return mCursor;
    }

Listview прямо сейчас я могу показать поле DateTime, но мне нужно преобразовать поле для каждой строки, а затем показать его, и я не знаю, как это сделать:

private void dateTime() {
    cursor = db.getUserDateTimeLocations(mLocationRowId);
    startManagingCursor(cursor);
    SimpleDateFormat sdf = new SimpleDateFormat("MMM dd,yyyy HH:mm");
    mTime= cursor.getLong(3);
    Date resultdate = new Date(mTime);
    String mDateTime = sdf.format(resultdate);
    //Toast.makeText(this, mDateTime, Toast.LENGTH_LONG).show();

    String[] from = new String[] { DBAdapter.KEY_DATETIME};<--How to do it here?
    int[] to = new int[] {R.id.label};

    SimpleCursorAdapter locations = new SimpleCursorAdapter(this, R.layout.user_row, cursor, from, to);
    setListAdapter(locations);

}

Ответы [ 3 ]

1 голос
/ 12 августа 2011

Если это единственная специальная часть вашего SimpleCursorAdapter, вам поможет следующее. Добавьте этот код перед вызовом setListAdapter:

locations.setViewBinder(new SimpleCursorAdapter.ViewBinder() {

        @Override
        public boolean setViewValue(final View view, final Cursor cursor, final int columnIndex) {
            if (columnIndex == 1) {
                TextView textView = (TextView) view;

                long millis = cursor.getLong(columnIndex);
                textView.setText(yourFormattingOfMillisToDateHere);

                return true;
            }

            return false;
        }

    } );
0 голосов
/ 12 августа 2011

Хммм, похоже, вам может понадобиться свернуть собственный адаптер.SimpleCursorAdapter - это простой способ привязки полей из БД к некоторому текстовому представлению.См. эту ссылку для хорошего прохождения.

0 голосов
/ 12 августа 2011

Все, что вам нужно сделать, это переопределить setViewText в CursorAdapter. Несколько строк моего кода, решающих идентичные проблемы:

private class MyCursorAdapter extends SimpleCursorAdapter {

    public MyCursorAdapter(Context context, int layout, Cursor c,
            String[] from, int[] to) {
        super(context, layout, c, from, to);

    }

    private Date d = new Date();

    @Override
    public void setViewText(TextView v, String text) {
        if (v.getId() == R.id.TrackTime) {
            d.setTime(Long.parseLong(text));
            text = d.toLocaleString();
        }
        super.setViewText(v, text);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...