1

我创建了ListViewa 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 类中的查询:

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

编辑有效的代码,但重置列表视图的视图....

Cursor c3 = (Cursor) getListAdapter().getItem(info.position);
                        startManagingCursor(c3);
                          aaaaa = c3.getString(c3.getColumnIndex(TabRegistry.NUMBER));
                         c3.close();
4

1 回答 1

2

AdapterView.AdapterContextMenuInfo有一个名为的字段id,表示该选定行的数据库中的行 ID。您需要查询该 id 而不是position表示列表中位置的字段:

rowId = info.id;

然后查询您的数据库rowId以获取该项目的数据。

编辑:

您可能不想使用您添加的解决方案。您关闭游标,因此没有更多数据(这就是您必须重新启动活动的原因,因为您可能仅在onCreate方法中查询数据库)。

info.id我告诉过您,当您使用长按(显示)列表中的不同行时,检查是否返回不同的值ContextMenu,这意味着ContextMenu(可能)为不同的行选择不同的行 ID)。

我不知道是什么导致了你的问题(如果删除有效,我会说活动中有一些东西),所以我做了一个小例子来说明你正在尝试做什么,这样你就可以看到这种类型的代码:

http://pastebin.com/Yri03S0T

于 2012-04-20T16:52:01.097 回答