2011-03-29 40 views
0

我有表格,它有一些行數。列有KEY_ROWIDKEY_TITLE。 我需要一個(除了空KEY_TITLE行)走通他們一個和當前光標位置是KEY_ROWID = rowId如何通過android的所有數據庫條目?

只是爲了說明是相同的:

KEY_ROWID KEY_TITLE 
    1   
    3   title3 
    4   title4 
    5   
    7   title7 

ROWID等於4.用戶按下按鈕,我們應該得到下一行的細節與非空的標題,即第7行用戶再次按下它 - 我們應該得到第3行(從結尾到達時從頭開始)。

如何實現相同的? 相信,我應該得到所有行,其中KEY_TITLE非空到遊標。然後,有如moveToNextmoveToFirstisLast的方法。 但我該如何設置當前位置?我是否需要首先遍歷所有行並比較rowIds?

回答

0

我已經寫了下面的代碼是一樣的:

/** 
* Get next record 
* 
* @param next possible values are +1 - move forward, -1 - move back 
* @return rowId of the next record 
*/  
public long getNextRecord(int next, long rowId) { 
    long nextRowId = 0; 
    Cursor mCursor = mDb.query(DATABASE_TABLE, new String[] {KEY_ROWID,KEY_TITLE}, KEY_TITLE + "!=\"\"", null, null, null, null); 
    if (mCursor.moveToFirst()) { 
     do { 
      Log.i(TAG, "rowId/KEY_ROWID/KEY_TITLE: "+rowId+"/"+mCursor.getLong(mCursor.getColumnIndexOrThrow(KEY_ROWID))+"/"+mCursor.getString(mCursor.getColumnIndexOrThrow(KEY_TITLE))); 
      if (mCursor.getLong(mCursor.getColumnIndexOrThrow(KEY_ROWID)) == rowId) { 
       if (!mCursor.move(next)) { 
        // first (-1) or last position 
        if (mCursor.getPosition() == -1) { 
         mCursor.moveToLast(); 
        } else { 
         mCursor.moveToFirst(); 
        } 
       } 
       nextRowId = mCursor.getLong(mCursor.getColumnIndexOrThrow(KEY_ROWID)); 
       break; 
      } 
     } while (mCursor.moveToNext()); 
    } 
      mCursor.close(); 
     return nextRowId; 
}  

有沒有更好/更快捷的方式來達到同樣的?

0
cursor.moveToPosition(int position); ? 
+0

是的,但如何計算的位置? – 2011-03-29 18:36:38

+0

執行查詢:「WHERE KEY_TITLE不爲NULL」,然後應該將相應的行ID存儲在數組中。然後導航通過它,如果你到達你的數組的末尾,只需將光標移回第一行,我建議你看看這個:http://developer.android.com/guide/topics/providers/content- providers.html#查詢 – olamotte 2011-03-29 18:41:09

相關問題