2012-04-20 54 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