Я создаю список, который отсортирован в алфавитном порядке. Список должен показать делитель, содержащий Букву, что следующие значки принадлежат.
Я использую Cursoradapter, который содержит уже отсортированный результат базы данных. Я планирую добавление делителя к элементу списка и устанавливаю его на видимый, если показанная буква изменяется. Как я знаю, что у меня есть новая Буква? Существует ли лучший путь, затем продвигающийся или назад в курсоре и проверке, если объект, который я показываю, является концом или начало новой группы?
Это можно сделать в запросе 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) набор результатов - для каждого элемента, начинающегося с «новой» буквы, 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