我创建了一个ListView
CursorAdapter
,填充了我的数据库表。在我添加ContextMenu
之后,只需长按一下我所在表格中所需的ListView
选择信息行。
问题在于:我无法收集ListView
单行的信息,每行都给出了相同的结果。我认为我在查询中做错了。
onCreate
:
private void createTabRegistry(SQLiteDatabase db)
{
String sql = "CREATE TABLE {0} ({1} INTEGER PRIMARY KEY AUTOINCREMENT, {2} TEXT,{3} INTEGER,{4} TEXT,{5} TEXT,{6} TEXT, {7} TEXT);";
db.execSQL(MessageFormat.format(sql, TabRegistry.TABLE_NAME, TabRegistry._ID,TabRegistry.TYPE, TabRegistry.DATE, TabRegistry.STATUS, TabRegistry.NUMBER, TabRegistry.MESSAGE, TabRegistry.OTHER));
}
我在db class中的查询:
public Cursor getRegistry2(long id) {
return (getReadableDatabase().query(
TabRegistry.TABLE_NAME,
TabRegistry.COLUMNS,
TabRegistry._ID + " = " + id,
null,
null,
null,
null,
null));
}
我的活动中ContextMenu
的ID:
AdapterView.AdapterContextMenuInfo info= (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
id = getListAdapter().getItemId(info.position);
我在活动类中的光标:
Cursor c3 = databaseHelper.getRegistry2(id);
if (c3 != null) {
c3.moveToFirst();
}
dbnumber = (c3.getString(c3.getColumnIndex(TabRegistry.NUMBER)));
如何为dbnumber
字符串分配奇怪的ListView
行的值?
EDIT代码有效,但重置了listview的视图......
Cursor c3 = (Cursor) getListAdapter().getItem(info.position);
startManagingCursor(c3);
aaaaa = c3.getString(c3.getColumnIndex(TabRegistry.NUMBER));
c3.close();
答案 0 :(得分:2)
AdapterView.AdapterContextMenuInfo
有一个名为id
的字段,表示该选定行的数据库中的行ID。您需要查询该ID,而不是查询代表列表中位置的position
字段:
rowId = info.id;
然后在数据库中查询rowId
以获取该项目的数据。
修改强>
您可能不想使用您添加的解决方案。您关闭游标以便不再有数据(这就是您必须重新启动活动的原因,因为您可能只在onCreate
方法中查询数据库)。
我告诉你检查info.id
在列表中使用长按(显示ContextMenu
)不同的行时是否返回不同的值,这意味着ContextMenu
(可能)为不同的行选择不同的行ID。
我不知道是什么原因引起了你的问题(如果删除有效,我会说活动中有一些内容),所以我做了一个小例子,你想要做什么,所以你可以看到这种类型的代码: