我正在构建一个按字母顺序排序的列表。该列表应显示包含以下图标所属的Letter的分隔符。
我正在使用包含数据库已经排序结果的Cursoradapter。 我计划将分隔符添加到列表项并将其设置为可见(如果显示的字母更改)。我怎么知道我有一封新信?有没有更好的方法然后在光标中前进或后退并检查我显示的项目是否是新组的结束或开始?
答案 0 :(得分:2)
您可以在为Cursor提供数据的SQL查询中执行此操作。
假设我们有person(name varchar)
表。
而不是只问:
SELECT name FROM person ORDER BY name;
可以查询:
SELECT p.name, CASE(
SELECT COUNT(*)
FROM person
WHERE name<p.name and SUBSTR(name, 1, 1)=SUBSTR(p.name,1 , 1)
) WHEN 0 THEN 1 ELSE 0 END isFirst
FROM person p
ORDER BY name;
给出(name,isFirst)结果集 - 每个以“new”字母开头的项目将isFirst设置为1,表示新组的开始。
编辑:示例:
CREATE TABLE person(name varchar);
INSERT INTO person SELECT 'Jim' UNION SELECT 'Tom' UNION SELECT 'Ben' UNION SELECT 'John' UNION SELECT 'Alice' UNION SELECT 'Chris' UNION SELECT 'Anna' UNION SELECT 'Jerry';
SELECT p.name, CASE(
SELECT COUNT(*)
FROM person
WHERE name<p.name and SUBSTR(name, 1, 1)=SUBSTR(p.name,1 , 1)
) WHEN 0 THEN 1 ELSE 0 END isFirst
FROM person p
ORDER BY name;
给出:
Alice|1
Anna|0
Ben|1
Chris|1
Jerry|1
Jim|0
John|0
Tom|1