2013-08-01 55 views
1

我正在为列表中的一行进行布局。其中一列由“工作时间”组成,该工作时间从数据库获取数据,分为两部分:开始和结束。我正在使用游标加载器将数据导入UI。所以我的问题是,如果两次分开存储,将开始和结束的数据合并为12:00〜4:00格式的最佳方式是什么?我曾考虑过放置另一个线性布局,但这看起来很浪费。有什么建议么?试图避免多个布局级别

编辑:

这是我的装载机回调,非常标准,我认为。

@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

是的,所以每行都有一个starttime结束时间存储在不同的列中,我想知道把它们放在一起的最好方法是 – user1549672

+0

当你将它们拉出数据库时,我假设你将它们放入一个对象中(数据模型或其他),而你的光标正在返回一个模型,而不仅仅是单个列? – jlindenbaum

回答

1

我认为最好是在ViewHolder中使用自定义的CursorAdapter。

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

。我有点困惑,但是它从哪里得到2个独立的列项目? – user1549672

+0

她<从这里过去你的光标形成的时间>你可以把每一列,你需要的。像这样: cursor.getLong(cursor.getColumnIndex(Columns.COLUMN_CREATEDBY) – IronBCC

+0

哦,我明白了!感谢这似乎工作 – user1549672