我有桌子,那里有一些行数。列有KEY_ROWID
和KEY_TITLE
。
我需要逐个通过它们(空KEY_TITLE
行除外),当前光标位置为KEY_ROWID = rowId
。
只是为了说明一样:
KEY_ROWID KEY_TITLE
1
3 title3
4 title4
5
7 title7
rowId等于4.用户按下按钮,我们应该获得具有非空标题的下一行的详细信息,即第7行。用户再次按下它 - 我们应该得到第3行(从结束时开始到达)。
如何实现相同的?
相信,我应该将KEY_TITLE
非空的所有行都放到Cursor中。然后,有moveToNext
,moveToFirst
,isLast
等方法。
但是我如何设置当前位置?我是否需要先通过所有行并比较rowIds?
答案 0 :(得分:0)
cursor.moveToPosition( int position); ?
答案 1 :(得分: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;
}
有没有更好/更快的方法来实现同样的目标?