2012-04-27 21 views
3

ListViewの各行にバインドされたデータベース値の小計を表示しようとしています。小計をデータベース列として保持したくないので、表示されている値を集計しようとしています。もちろん、これはスクロールを扱う方法の明白な問題を引き起こします。スクロールは値を表示して再表示し、実行中の小計を乱します。各リストビュー行に小計を表示

各リストビューの行には、値と小計の2つのフィールドがあります。値はデータベース行から、小計はその行までのすべてのデータベース行の合計です。私は、それが行の挿入と削除をより困難にするので、私がする必要がない場合、データベースの行に小計を含めたくない。

アイデア? ListViewコントロールにロードされ、その後、同時にそれを計算されている値によって

+0

小計はどのように計算されますか? – candyleung

+0

稼働している合計です。データベースの行に小切手の金額が含まれていて、残高は含まれていない小切手と考えてください。 – Digilee

答えて

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

+0

私はこの回答にバンプを付けるつもりです。なぜなら、少なくとも途中で使用して開発を続けることにしたからです。その他の提案はまだ歓迎されています。 – Digilee

0

反復...

+0

それは私がやることですが、同じデータベースエントリがビューからスクロールしてビューに戻るたびにロードされ、アキュムレータが正しくないことが原因です。 – Digilee

+0

次に、レイアウトを変更して、TextViewが画面外に出ないようにします。基本的には底に固定してください。 – JoxTraex

+0

私はあなたが理解するとは思わない。私はそれをより明確にするために私の元の質問を編集した(私が望む)。 – Digilee

関連する問題