2010-06-24 7 views
1

Je construis une liste triée par ordre alphabétique. La liste devrait montrer un diviseur contenant la lettre à laquelle appartiennent les icônes suivantes.Comment afficher des séparations après certains éléments d'une liste?

J'utilise un Cursoradapter qui contient le résultat déjà trié de la base de données. Je prévois d'ajouter le diviseur à l'élément de la liste et de le rendre visible si la lettre affichée change. Comment puis-je savoir que j'ai une nouvelle lettre? Y a-t-il un meilleur moyen d'avancer ou de reculer dans le curseur et de vérifier si l'élément que je montre est la fin ou le début d'un nouveau groupe?

Répondre

2

Vous pouvez le faire dans une requête SQL qui fournit des données pour Cursor. Supposons que nous ayons person(name varchar) table.

Au lieu de demander simplement:

SELECT name FROM person ORDER BY name; 

On peut requête:

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; 

qui donne (nom, isFirst) resultset - chaque élément commençant par la lettre "nouveau" aura isFirst mis à 1 indiquant le début du nouveau groupe.

modifier: Exemple:

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; 

donne:

Alice|1 
Anna|0 
Ben|1 
Chris|1 
Jerry|1 
Jim|0 
John|0 
Tom|1 
+0

Grande idée, mais l'échantillon ne fonctionne pas. substring (nom) et sous-chaîne (p.name) sont toujours les mêmes – Janusz

+0

Êtes-vous sûr que cela ne fonctionne pas? Regardez l'exemple et le résultat ... – Gawcio

+0

Merci pour l'exemple, il fonctionne maintenant j'ai négligé la personne p chose à la fin. – Janusz

Questions connexes