アルファベット順にソートされたリストを作成しています。リストには、次のアイコンが属するレターを含む仕切りが表示されます。
データベースからのソート済みの結果を含むCursoradapterを使用しています。リストアイテムに仕切りを追加し、表示される文字が変更された場合に表示されるように設定する予定です。新しい手紙があることをどうやって知ることができますか?カーソルを前後に移動して、表示する項目が新しいグループの終わりか始まりかを確認するより良い方法はありますか?
アルファベット順にソートされたリストを作成しています。リストには、次のアイコンが属するレターを含む仕切りが表示されます。
データベースからのソート済みの結果を含むCursoradapterを使用しています。リストアイテムに仕切りを追加し、表示される文字が変更された場合に表示されるように設定する予定です。新しい手紙があることをどうやって知ることができますか?カーソルを前後に移動して、表示する項目が新しいグループの終わりか始まりかを確認するより良い方法はありますか?
Cursor にデータを提供する 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) 結果セットが得られます - 「new」文字で始まる各項目には、新しいグループの開始を示す 1 に設定された isFirst があります。
編集:例:
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