是否可以根据自定义游标适配器中的行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);
}
答案 0 :(得分:0)
确保在传递到适配器的Cursor表示的SELECT语句中包含_id。例如,如果我使用的是SimpleCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to)
,则我的Cursor c
会出现类似“SELECT _id,name FROM users;”的内容。
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”或此课程不起作用。