2013-08-01 4 views
1

Я делаю макет для строки в списке. Один из столбцов состоит из «Рабочих часов», который берет данные из базы данных в 2 части: начало и конец. Я использую загрузчик курсора, чтобы получить данные в пользовательском интерфейсе. Итак, мой вопрос - это лучший способ объединить данные как начала, так и конца в формат, например, 12: 00 ~ 4: 00, если 2 раза хранится отдельно? Я подумал о том, чтобы поместить еще один линейный макет, но это кажется пустой тратой. Какие-либо предложения?Попытка избежать нескольких уровней макета

EDIT:

Это мой Загрузчик обратные вызовы, довольно стандартное, я думаю.

@Override 
public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) { 
    String[] projection = Columns.getColumns(RawContract.PARAM_SIWORKDAYS); 

    CursorLoader cursorLoader = new CursorLoader(mContext, 
      BidProvider.CONTENT_URI_SIWORKDAYS, projection, null, null, null); 
    return cursorLoader; 
} 

@Override 
public void onLoadFinished(Loader<Cursor> loader, Cursor data) { 
    mAdapter.swapCursor(data); 
} 

@Override 
public void onLoaderReset(Loader<Cursor> loader) { 
    mAdapter.swapCursor(null); 
} 

И я использую его как этот

private void fillData() { 

    String[] from = new String[] { Columns.COLUMN_WORKDATE, 
      Columns.COLUMN_DAYCHARGE, Columns.COLUMN_TEMPERATURE, 
      Columns.COLUMN_WORKFROMHR, Columns.COLUMN_WORKTOHR, 
      Columns.COLUMN_WEATHER, Columns.COLUMN_CREATEDBY, 
      Columns.COLUMN_CREATEDDATE }; 
    int[] to = new int[] { R.id.contractor, R.id.contract_num, R.id.title, 
      R.id.value, R.id.status, R.id.dept_name, R.id.start, R.id.close }; 

    getLoaderManager().initLoader(0, null, this); 

    mAdapter = new SimpleCursorAdapter(mContext, R.layout.contract_row, null, from, 
      to, 0); 

    setListAdapter(mAdapter); 
} 

Так что я думаю, что я получаю в том, что я никогда не вручную вытащить данные из курсора, так что я не уверен, что лучший способ собрать эти две части данных.

+0

У вас есть «ListView», который заполняется из 'Cursor'; каждая строка имеет время начала - готовое время в нем? Я не совсем уверен, что это то, о чем вы просите ... Для ясности вы можете опубликовать свой адаптер и как вы вставляете курсор в «ListView»? – jlindenbaum

+0

да, поэтому каждая строка имеет время начала отсчета, хранящееся в отдельных столбцах, и мне было интересно, как лучше всего их собрать: – user1549672

+0

Когда вы вытаскиваете их из базы данных, я предполагаю, что вы помещаете их в объект (ваши данные модель или что-то еще), а ваш курсор возвращает модель, а не только отдельный столбец? – jlindenbaum

ответ

1

Я думаю, что лучше использовать пользовательский CursorAdapter с ViewHolder.

private static class MyCursorAdapter extends CursorAdapter { 
    private final Context context; 
    private final LayoutInflater layoutInflater; 

    public MyCursorAdapter(Context context, Cursor c, boolean autoRequery) { 
     super(context, c, autoRequery); 
     this.context = context; 
     this.layoutInflater = (LayoutInflater) context.getSystemService(Service.LAYOUT_INFLATER_SERVICE); 
    } 

    @Override 
    public View newView(Context context, Cursor cursor, ViewGroup parent) { 
     ViewHolder holder = new ViewHolder(); 
     View v = layoutInflater.inflate(R.layout.my_list_item, parent, false); 
     holder.startFinishTimeView = (TextView) v.findViewById(R.id.startFinishTimeView); 
     holder.content = v.findViewById(R.id.content); 
     v.setTag(holder); 
     return v; 
    } 

    @Override 
    public void bindView(View view, Context context, Cursor cursor) { 
     ViewHolder holder = (ViewHolder) view.getTag(); 
     holder.startFinishTimeView.setText(<past here your formated time from Cursor>); 
    } 

    private static class ViewHolder { 
     TextView startFinishTimeView; 
     View content; 
    } 
} 
+0

hm, это выглядит интересным. Я немного смущен, хотя, где он получает два отдельных столбца? – user1549672

+0

Ее <прошлое здесь ваше время форматирования из Курсора> вы можете брать все столбцы, что вам нужно. Например: cursor.getLong (cursor.getColumnIndex (Columns.COLUMN_CREATEDBY) – IronBCC

+0

О, я вижу! Спасибо, это похоже на работу – user1549672

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