Как показать разделители после некоторых элементов в списке? - PullRequest
1 голос
/ 24 июня 2010

Я строю список, отсортированный по алфавиту.В списке должен отображаться разделитель, содержащий букву, которой принадлежат следующие значки.

Я использую Cursoradapter, который содержит уже отсортированный результат из базы данных.Я планирую добавить разделитель к элементу списка и установить его видимым, если показанная буква изменится.Как я узнаю, что у меня есть новое письмо?Есть ли лучший способ, чем двигаться вперед или назад по курсору и проверять, является ли отображаемый элемент концом или началом новой группы?

1 Ответ

2 голосов
/ 24 июня 2010

Вы можете сделать это в запросе 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...