Android查询ListView上的where子句

时间:2012-04-20 16:43:37

标签: android cursor android-listview contextmenu

我创建了一个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();

1 个答案:

答案 0 :(得分:2)

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

rowId = info.id;

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

修改

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

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

我不知道是什么原因引起了你的问题(如果删除有效,我会说活动中有一些内容),所以我做了一个小例子,你想要做什么,所以你可以看到这种类型的代码:

http://pastebin.com/Yri03S0T