2010-01-10 53 views
3

也許我正在以這種錯誤的方式進行討論,但如果是這樣,請糾正我。 這是情況:我有一個查詢返回存儲在數據庫中的鈴聲的URI字符串。將數據添加到數據庫光標

我想添加一個「列」與這個光標與振鈴器「標題」(因爲這可以改變我的程序之外)。

我可以成功使用RingtoneManager來獲得標題,但我無法弄清楚如何將這個「列」添加到遊標數據供以後使用。

這是我到目前爲止有:

if (cursor != null) { 
    cursor.moveToFirst(); 
    do { 
     String ringerTitle = getRingerTitle(cursor.getString(cursor.getColumnIndex(PoolDbAdapter.KEY_RINGER))); 

     // How can I add ringerTitle to a new column here? 

    } while (cursor.moveToNext()); 
} 
+0

你的'光標'從哪裏來?你能顯示查詢嗎? – 2010-01-10 20:04:44

+0

遊標來自數據庫查詢並返回與鈴聲相關的URI,例如「content:// media/audio/3」 – Ryan 2010-01-10 20:24:13

回答

4

不能修改現有Cursor這種方式。您需要創建Cursor以及您最初尋找的數據。

更有可能的是,您不需要修改Cursor,而是使用Cursor的任何內容都必須更明智。例如,如果您的問題是您無法在SimpleCursorAdapter中使用計算列,則需要切換到CursorAdapter並覆蓋bindView()以獲得您想要的智能。

+0

不幸的是,這與我以前的SimpleCursorAdapter擴展所具有的問題有相同的問題。我無法控制bindView(或我以前的方法getView)每行被多次調用的事實,這會導致大量的丟失時間在相同的數據中多次查詢RingtoneManager。我只想查詢一次..是否有另一種方法我缺少映射值? – Ryan 2010-01-10 20:56:40

+0

通過setTag()緩存行中的值。您可以使用我提供的用於緩存findViewById()查找的相同技巧,在本書的免費摘錄中:http://commonsware.com/Android/excerpt.pdf – CommonsWare 2010-01-10 21:06:13

+0

我似乎無法找出setTag和getTag可以實現特定的行(只有佈局,ID等)..你能提供一個這樣的例子嗎? – Ryan 2010-01-10 21:26:07

1

我還沒有嘗試過(當我這樣做,我會在這裏更新),但是,也許下面的步驟將工作:

爲了討論各種情形,讓我們調用原始光標baseCursor

  1. 使用MatrixCursor創建要添加新列(我們稱之爲newColumnCurs或)
  2. 然後創建一個帶有baseCursor和newColumnCursor作爲元素的Cursor []。
  3. 將該數組傳遞給MergeCursor