android - 如何在 ListView 中的某些项目之后显示分隔符?

标签 android android-listview

我正在构建一个按字母顺序排序的列表。该列表应显示一个分隔符,其中包含以下图标所属的字母。

我正在使用一个 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”字母开头的项目都将 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

关于android - 如何在 ListView 中的某些项目之后显示分隔符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3108466/

相关文章:

android - 在发送耳语要求对应用程序进行评级后使用 Smooch android sdk 时没有此类方法异常

android - 在 CursorAdapter 中更改光标未正确更新列表项 View

android - Linkify、ListView 和 ActionMode。常规文本不再可点击

java - 如何将分钟转换为 HH :mm on android?

java - Android:使用 SSL 交换消息时出现问题

java - 如何存储大量字符串以优化初始化时间和搜索速度

java - 向ListView添加标题时出现空指针

android - 在方向更改时更改 View 背景图像

android - 如何在 Wifi-Direct Android 中创建特定的组所有者

android - 无法从 onListItemClick 开始 fragment