Как показать делители после некоторых объектов в listview?

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

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

1
задан Janusz 27 January 2012 в 08:48
поделиться

1 ответ

Это можно сделать в запросе 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
2
ответ дан 2 September 2019 в 23:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: