2010-06-24 51 views
1

我正在構建按字母順序排序的列表。該列表應顯示包含以下圖標所屬的Letter的分隔符。如何在列表視圖中的某些項目後顯示分隔符?

我正在使用一個Cursoradapter,它包含已經從數據庫中排序的結果。 我打算將分隔線添加到列表項目,並將其設置爲可見,如果顯示的字母更改。我怎麼知道我有一封新信?有沒有更好的方法,然後在光標前進或後退,並檢查我顯示的項目是新組的開始還是結束?

回答

2

您可以在爲查詢提供數據的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; 

,給(名字,isFirst)ResultSet - 每一項目開始與 「新」 的信件將有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 
+0

偉大的想法,但樣品不工作。 substring(name)和substring(p.name)總是相同 – Janusz 2010-06-24 09:51:38

+0

你確定它不工作?看看這個例子和結果... – Gawcio 2010-06-24 10:11:08

+0

感謝它現在正在工作的例子,我在最後忽略了人物。 – Janusz 2010-06-24 10:19:57

相關問題