我有一个SQLite表任务,我想显示最高"优先级"在ListView中。
优先级是一个复杂的计算,因此我无法在SQL中计算它并命令/限制结果。
为了实现这个目标,我正在考虑获得一个包含所有任务的Cursor,遍历行计算并设置" priority"编号,并删除/重新排序光标的行,使其仅显示前5个。
从我发现的,我可以设置一个"优先级"通过扩展Cursor使值暴露给CursorWindow。
不幸的是,我还没有找到一种方法来改变Cursor的行来删除/命令它们。
有办法吗?如果没有,我也会接受其他有效的设计方案。
当然,我可以添加一个"优先级"我的表格中的列,每次更新,然后使用订单/限制进行选择,但效率不高。
我想我也可以在适配器中进行过滤/排序,但我不认为那是适配器应该做的工作。
答案 0 :(得分:0)
在Android中,没有简单的安装用户定义的功能,因此如果在SQL中无法计算优先级,则必须手动进行排序/过滤。
从数据库中获取的游标(类SQLiteCursor)是只读的,因此您无法将优先级存储在游标本身中。
你必须添加一个间接级别:创建你自己的存储优先级的类和对原始游标行的引用:
class TaskPriority {
public int priority;
public int positionInCursor;
};
为游标中的所有行计算这些字段,然后按优先级对这些对象进行排序。然后,您可以使用前五个positionInCursor
字段来获取实际数据。
(如果您需要一些Cursor
来显示列表视图中的数据,只需将这五行复制到MatrixCursor。)