2012-04-20 55 views
1

我创建了一个ListView,其中CursorAdapter由我的db表填充。在我添加一个ContextMenu后,点击所需的ListView行从我的表格中选择信息。Android查询ListView的where子句

问题是:我无法收集该单行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类查询:

AdapterView.AdapterContextMenuInfo info= (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); 
id = getListAdapter().getItemId(info.position); 

我的光标在活动类:

public Cursor getRegistry2(long id) { 
     return (getReadableDatabase().query(
      TabRegistry.TABLE_NAME, 
      TabRegistry.COLUMNS, 
      TabRegistry._ID + " = " + id, 
      null, 
      null, 
      null, 
      null, 
      null)); 
    } 

在我的活动ContextMenu ID

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(); 

回答

2

AdapterView.AdapterContextMenuInfo有一个名为id场表示从选定行的数据库行ID。你要查询该ID而不是position场表示在列表中的位置:

rowId = info.id; 

,然后查询数据库为rowId获得该项目的数据。

编辑:

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

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

我不知道是什么导致了你的问题(如果删除的作品,我会说有什么活动),所以我做了一个小例子,你正在做什么,所以你可以看到这种类型的代码:

http://pastebin.com/Yri03S0T

+0

感谢您的回答....但我还没有解决....我一直在列表视图中的所有行相同的值,我应该改变吗? – Tony 2012-04-20 18:17:04

+0

@Tony您是否使用自定义'CursorAdapter'或android'SDK'标准的?你总是从列表中获得哪个值(0,1,2..etc?),哪个位置? – Luksprog 2012-04-20 18:18:25

+0

我使用了一个自定义的'CursorAdapter' ...并且我总是和我的listview的第一行一样的结果...我认为这是因为'c3。moveToFirst();' – Tony 2012-04-20 18:29:39