可以从游标行id填充列表视图吗?

时间:2010-09-23 16:23:37

标签: android

是否可以根据自定义游标适配器中的行ID填充列表视图。我一直收到错误“illegalArguementException column:_id不存在”。但数据库有它并且已经正确使用。我不知道该怎么做,因为我需要从同一个数据库填充不同的列表视图,我不想创建多个仍然具有相同列名的数据库。任何想法将不胜感激。感谢

这里的数据库代码很冷:

public Cursor retrieveItemRow(long Id){
        open();
String[] Columns = new String[] {TITLE,DATE, TIME};
Cursor row = db.query(true,DATABASE_TABLE, Columns, KEY_ID +"=" +Id, null, null, null, null,null);
    if(row != null){
    row.moveToNext();
    return row;
    }
    return row;
      }

这是我试图称之为的方法:

 public void fillRowData(long Id) {

Cursor cursor = adapter.retrieveRow(id);
startManagingCursor(cursor);
String[] from = new String[]{DBAdapter.TITLE, DBAdapter.DATE, DBAdapter.TIME};
int[] to = new int[]{R.id.Name, R.id.Date, R.id.Time};

customCursor items = new customCursor(this, R.layout.viewlist, cursor, from, to);
setListAdapter(items);          

}

1 个答案:

答案 0 :(得分:0)

确保在传递到适配器的Cursor表示的SELECT语句中包含_id。例如,如果我使用的是SimpleCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to),则我的Cursor c会出现类似“SELECT _id,name FROM users;”的内容。

来自Notepad Tutorial

private void fillData() {
     // Get all of the notes from the database and create the item list
     Cursor c = mDbHelper.fetchAllNotes();
     startManagingCursor(c);

     String[] from = new String[] { NotesDbAdapter.KEY_TITLE };
     int[] to = new int[] { R.id.text1 };

     // Now create an array adapter and set it to display using our row
     SimpleCursorAdapter notes =
          new SimpleCursorAdapter(this, R.layout.notes_row, c, from, to);
     setListAdapter(notes);
}

本教程在数据库助手类中定义了一个返回所有Note个对象的方法。基本上他们使用SQLiteDatabase的{​​{1}}方法返回query个对象。查询的选择字符串是您应该包含_id列的位置。

因此,在您的情况下,您需要将Cursor添加到KEY_ID String数组变量中,因为这些是select语句中包含的列(db.query())。这也在CursorAdapter文档中暗示:

  

Cursor必须包含一个名为的列   “_id”或此课程不起作用。