2012-04-27 35 views
3

我试图显示绑定到我的ListView的每一行的数据库值的小计。我不想将小计保留为数据库列,因此我试图在显示值时累计这些值。当然,这带来了一个显而易见的问题,就是如何处理滚动,这会显示并重新显示一个值,从而搞砸了运行的小计。在每个列表视图行上显示子汇总

详细说明,每个listview行有两个字段,一个值和一个小计。该值来自数据库行,小计是直至并包括该行的所有数据库行的总和。如果我不需要,我不希望将小计纳入数据库行,因为这会使插入和删除行变得更加困难。

任何想法?

+0

小计是如何计算的? – candyleung 2012-04-27 02:43:29

+0

这是一个运行总数。把它看作一本支票簿,其中数据库行包含支票金额,但不包括余额。 – Digilee 2012-04-27 02:57:17

回答

2

创建自定义适配器,创建一个数组来保存分类汇总和使用,在您的getView维持即使在滚动时也是小计。

public class CustomCursorAdapter extends SimpleCursorAdapter { 

private Cursor c; 
private Context context; 
private Activity activity; 
private int[] subtotal; 
private int subtotalhold; 
private int layout; 

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

    this.c = c; 
    this.context = context; 
    this.activity = (Activity) context; 
    this.layout = layout; 

    subtotal = new int[c.getCount()]; 
    subtotalhold=0; 
    c.moveToFirst(); 
    int i = 0; 
    while (c.isAfterLast() == false) { 
     subtotalhold = subtotalhold + c.getInt(columnIndex); 
     subtotal[i] = subtotalhold; 
     i++; 
     c.moveToNext(); 
    } 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    if (convertView == null) 
     convertView = View.inflate(context, layout, null); 
    c.moveToPosition(position); 

    TextView subtotal = (TextView) convertView.findViewById(R.id.subtotal); 
      subtotal.setText(subtotal[position]); 

      // rest of your code to populate the list row 
    return (row); 
    } 
} 
+0

巴拉克,谢谢你的回答。我也考虑过这种方法,但数据库中潜在行的数量可能需要大量的浮点数或双精度数据,我不知道使用这种类型的内存有多好。我仍然可以这样做,但我正在研究另一种方法。 – Digilee 2012-04-28 03:18:47

+0

我会给这个答案的凹凸,因为我决定至少在临时使用它,以便我可以继续发展。任何其他建议仍然受欢迎。 – Digilee 2012-04-28 03:24:59

0

迭代通过被加载到ListView中,然后在同一时间计算它的价值...

+0

这就是我所做的,但是每当它滚动出视图并回到视图中时,相同的数据库条目就会被加载,导致累加器不正确。 – Digilee 2012-04-27 03:26:32

+0

然后更改您的布局,以便TextView不会离开屏幕。基本上将其固定在底部。 – JoxTraex 2012-04-27 03:27:45

+0

我不认为你明白。我编辑了我的原始问题以使其更清楚(我希望)。 – Digilee 2012-04-27 03:42:49