我有一个ListView,它显示了一个银行账户的交易列表,最近的一个是底部最旧的。我希望每个Listview项目在该特定交易之后显示帐户余额的快照,一直到显示帐户起始余额的页脚视图。例如,假设我开了一个300美元的账户,我提取两个50美元的提款和10美元的存款。我想看到这样的事情:
| transDate | transAmount | accountBalance |
+-----------+-------------+----------------+
| 04/09/15 | +$10 | $210 |
| 04/05/15 | -$50 | $200 |
| 04/03/15 | -$50 | $250 |
| 04/01/15 | start | $300 |
目前,我的交易表只保存交易日期,金额,以及是否是提款或存款,因此我可以显示上面的前两列。
我可能是错的,但我认为在数据库中保存帐户余额快照是安全的,因为该字段可以被操纵,我想尽我所能确保所有计数反映了当前的平衡。
出于同样的原因,我想在列表视图填充时将第三列作为计算值,但我不知道如何调整CursorAdapter或listview来执行此操作。这可能吗?
答案 0 :(得分:1)
恕我直言,我认为保持数据库中的余额并不是一个坏主意。但是,如果你把这个任务交给我,我就会这样做:
ResourceCursorAdapter
的子类。这将处理为列表项创建视图。SparseArray
以保留余额。swapCursor()
以遍历游标并为每条记录生成余额。由于每条记录都有一个ID,因此将余额放在SparseArray
中,并将ID作为密钥。然后致电super.swapCursor()
bindView()
以获取光标在其当前位置的日期和金额,并将它们放在视图中。然后,使用光标中的记录ID,从SparseArray
获取余额并将其放在视图中。这是一种蛮力的方法,不是很优雅。并且性能肯定会降低更多的交易。
我认为要真正完成这项工作,您需要一些对帐检查点,这样您就不会在开始时使用零余额,而是从最后一次对帐余额开始。否则,当您将光标设置在适配器上时,该适配器又调用swapCursor()
方法,在ListView
显示之前生成所有余额需要永远。