【问题标题】:How to show dividers after some items in a listview?如何在列表视图中的某些项目之后显示分隔符?
【发布时间】:2010-06-24 08:56:29
【问题描述】:

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

我正在使用包含数据库中已排序结果的光标适配器。 我计划将分隔线添加到列表项中,并在显示的字母发生变化时将其设置为可见。我怎么知道我有一封新信?有没有比在光标中前进或后退更好的方法来检查我显示的项目是新组的结尾还是开头?

【问题讨论】:

    标签: android android-listview


    【解决方案1】:

    您可以在为 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
    

    【讨论】:

    • 好主意,但示例不起作用。 substring(name) 和 substring(p.name) 总是相同的
    • 感谢它现在正在工作的示例,我最后忽略了人 p 的事情。
    • 顺便你可以重新标记问题添加'sql'和'sqlite'标签。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-06
    相关资源
    最近更新 更多