2012-02-15 3 views
0

У меня возникла проблема, когда у меня есть поле со значением datetime и вы хотите отобразить форматированное значение в списке. Может кто-нибудь, пожалуйста, взгляните на мой код и помогите с этим?Преобразование даты из SQLite и заполнение Listview

cursor = db.getAllSms(); 
startManagingCursor(cursor); 
int mTime= cursor.getColumnIndex(DBAdapter.KEY_DATETIME); 



    String[] from = new String[cursor.getCount()]; 
    int[] to = new int[] {R.id.label}; 
    int counter = 0; 
    for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()){ 
     SimpleDateFormat sdf = new SimpleDateFormat("dd MMMM yyyy HH:mm"); 

     Date resultdate = new Date(cursor.getLong(mTime)); 
     String mDateTime = sdf.format(resultdate); 
     from[counter] = mDateTime; 
     counter++; 
    } 



    SimpleCursorAdapter users = new SimpleCursorAdapter(this, R.layout.sms_row, cursor, from, to); 
    setListAdapter(users); 
+0

чем проблема? – confucius

ответ

3

SimpleCursorAdapter слишком прост для того, что вы пытаетесь сделать. Параметр «from» на самом деле представляет собой массив имен столбцов, и данные будут отображаться непосредственно из курсора в соответствующий TextView для каждой строки в курсоре.

Мне сказали, что правильным способом будет расширение TextView для понимания данных, поскольку оно хранится в вашем курсоре и внутренне обрабатывает форматирование. Но другой, может быть, менее технически правильный способ заключается в следующем:

Расширьте CursorAdapter и поместите логику выше в bindView. Например:

class DateTimeCursorAdapter extends CursorAdapter { 
    LayoutInflater mInflater; 

    private int mTime; 
    SimpleDateFormat sdf; 

    DateTimeCursorAdapter(Context context, Cursor cursor) 
    { 
     super(context, cursor); 
     mInflater = (LayoutInflater) context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     mTime = cursor.getColumnIndex(DBAdapter.KEY_DATETIME); 
     sdf = new SimpleDateFormat("dd MMMM yyyy HH:mm"); 

    } 

    public View newView(Context context, Cursor cursor, ViewGroup parent) 
    { 
     return mInflater.inflate(R.layout.dispatchesrow, parent, false); 
    } 

    public void bindView(View row, Context context, Cursor cursor) 
    { 
     TextView tvLabel = (TextView) row 
       .findViewById(R.id.label); 


     Date resultdate = new Date(cursor.getLong(mTime)); 
     String mDateTime = sdf.format(resultdate); 
     tvLabel.setText(mDateTime);   
    } 

} 

Тогда:

Cursor c = mDB.getSms(); 
startManagingCursor(c); 
DateTimeCursorAdapter adapter = new DateTimeCursorAdapter(this, cursor); 
setListAdapter(adapter); 
+0

Awesome !! Большое спасибо. – bond

+0

Я немного опоздал, но ваш ответ велик! Он отлично работает и благодарит вас! Мне нужно добавить только 2 вещи: в newView() раздутый макет - это макет элемента списка, а во-вторых, метод startManagingCursor устарел и должен быть тщательно обработан. – ElaGorilaki

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