Android 如何使用cursoradapter在listview中显示空行?

Android 如何使用cursoradapter在listview中显示空行?,android,sqlite,android-cursoradapter,Android,Sqlite,Android Cursoradapter,我有一个Sqlite数据库表,它有以下列:_id、key(int)、name(text)。这里的密钥是唯一的密钥。假设表中有以下行: _id |键|名称 1 | 2 | n2 2 | 3 | n3 3 | 5 | n5 4 | 6 | n6 现在,我必须显示这个表的列表视图,其中从key=1开始,如果key存在,我将显示key后跟name,如果key不在表中,我将显示key后跟'notassigned'。如何使用游标适配器执行此操作? e、 g.对于上表,我将显示如下列表视图: 未分配 氮气 n

我有一个Sqlite数据库表,它有以下列:_id、key(int)、name(text)。这里的密钥是唯一的密钥。假设表中有以下行:

_id |键|名称 1 | 2 | n2 2 | 3 | n3 3 | 5 | n5 4 | 6 | n6 现在,我必须显示这个表的列表视图,其中从key=1开始,如果key存在,我将显示key后跟name,如果key不在表中,我将显示key后跟'notassigned'。如何使用游标适配器执行此操作? e、 g.对于上表,我将显示如下列表视图:

  • 未分配
  • 氮气
  • n3
  • 未分配
  • n5
  • n6

  • 我认为这是两个最简单的方法:

    • 为所有可能的键创建空行

      当您在数据库中插入新行时,假设key=9,检查数据库中当前最高的键是什么(这里是6),并在该行和新行之间创建空行(名称设置为
      NULL
      或空字符串)。
      然后在
      光标或适配器中,如果名称为空,则可以轻松显示“未分配”

    • 子类
      CursorWrapper

      另一种方法是子类化和重写
      move()
      moveToNext()
      getCount()
      。。。模拟空行。这更灵活,需要更少的空间和数据库操作,但有些方法可能很难实现(您将如何编写
      getCount()
      ?它应该返回最高的键,但如何高效地找到它?)


    用游标适配器,我想你不容易做到。此类适配器的数据集是数据库结果集上的光标。您的结果集中没有这些“未分配”行,更改SQL以获取它们将很难。如果确实要这样做,则需要使用选择列表中的IFNULL(名称“Not assigned”)右键连接到另一个序列号表(在您的_table.key=number_table.number上)。您还需要使用原始查询

    我建议改为使用ArrayAdapter,它是通过在结果光标上迭代并在运行时识别差距来构建的。伪代码示例:

    listArray = new ArrayList<String>();
    int count = 1;
    while (cursor.moveToNext())
    {
        get key and name from cursor row
        while (count < key)  //Add 'not assigned' for any gaps
        {
            listArray.add(String.valueOf(count) + ":" + "not assigned");
            count++;
        }
        listArray.add(String.valueOf(count) + ":" + name);
        count++;
    }
    cursor.close();
    
    listary=newarraylist();
    整数计数=1;
    while(cursor.moveToNext())
    {
    从光标行获取键和名称
    while(count

    然后使用listArray作为ArrayAdapter的数据集。

    问题在于,您的数据库指出哪些元素应显示在列表中,而您希望显示数据库中不存在的列表项。我想说,在数据库和视图组件之间需要一个类似助手的工具来加载数据库的东西,将缺失的行添加到一组完整的数据中,并将这组数据(SQLite数据+缺失行)提供给适配器类。然后,适配器知道列表中的行数,并可以创建此数量的视图。现在您有了相同数量的数据对象和视图

    也许这能帮你。这是谷歌将光标转换为对象的一个例子。然后您可以使用ArrayAdapter