改变SQLite游标?

时间:2016-02-14 03:07:53

标签: android sqlite

我有一个SQLite表任务,我想显示最高"优先级"在ListView中。

优先级是一个复杂的计算,因此我无法在SQL中计算它并命令/限制结果。

为了实现这个目标,我正在考虑获得一个包含所有任务的Cursor,遍历行计算并设置" priority"编号,并删除/重新排序光标的行,使其仅显示前5个。

从我发现的,我可以设置一个"优先级"通过扩展Cursor使值暴露给CursorWindow。

不幸的是,我还没有找到一种方法来改变Cursor的行来删除/命令它们。

有办法吗?如果没有,我也会接受其他有效的设计方案。

当然,我可以添加一个"优先级"我的表格中的列,每次更新,然后使用订单/限制进行选择,但效率不高。

我想我也可以在适配器中进行过滤/排序,但我不认为那是适配器应该做的工作。

1 个答案:

答案 0 :(得分:0)

在Android中,没有简单的安装用户定义的功能,因此如果在SQL中无法计算优先级,则必须手动进行排序/过滤。

从数据库中获取的游标(类SQLiteCursor)是只读的,因此您无法将优先级存储在游标本身中。

你必须添加一个间接级别:创建你自己的存储优先级的类和对原始游标行的引用:

class TaskPriority {
    public int priority;
    public int positionInCursor;
};

为游标中的所有行计算这些字段,然后按优先级对这些对象进行排序。然后,您可以使用前五个positionInCursor字段来获取实际数据。

(如果您需要一些Cursor来显示列表视图中的数据,只需将这五行复制到MatrixCursor。)