36

如何使用光标数据创建列表数组(滚动时列表显示第一个字母)?

4

5 回答 5

69

遍历 中的每个元素Cursor,并将它们一一添加到ArrayList.

ArrayList<WhateverTypeYouWant> mArrayList = new ArrayList<WhateverTypeYouWant>();
for(mCursor.moveToFirst(); !mCursor.isAfterLast(); mCursor.moveToNext()) {
    // The Cursor is now set to the right position
    mArrayList.add(mCursor.getWhateverTypeYouWant(WHATEVER_COLUMN_INDEX_YOU_WANT));
}

(替换WhateverTypeYouWant为您想要创建的任何类型ArrayList,以及WHATEVER_COLUMN_INDEX_YOU_WANT您想要从光标获取的值的列索引。)

于 2009-08-31T16:24:59.583 回答
41

一个快速更正:上面的 for 循环跳过了光标的第一个元素。要包含第一个元素,请使用以下命令:

ArrayList<String> mArrayList = new ArrayList<String>();
mCursor.moveToFirst();
while(!mCursor.isAfterLast()) {
     mArrayList.add(mCursor.getString(mCursor.getColumnIndex(dbAdapter.KEY_NAME))); //add the item
     mCursor.moveToNext();
}
于 2011-07-20T20:23:04.793 回答
23

比@imbrizi 的答案更好的是:

ArrayList<String> mArrayList = new ArrayList<String>();
while(mCursor.moveToNext()) {
     mArrayList.add(mCursor.getString(mCursor.getColumnIndex(dbAdapter.KEY_NAME))); //add the item
}

moveToNext()如果没有剩余任何东西,将返回 false,因此这会将 SLOC 减少一些,并且更容易看到。

更好的是在循环之外获取列索引。

ArrayList<String> mArrayList = new ArrayList<String>();
int columnIndex=mCursor.getColumnIndex(dbAdapter.KEY_NAME)
while(mCursor.moveToNext()) {
     mArrayList.add(mCursor.getString(columnIndex)); //add the item
}
于 2014-01-20T03:19:30.697 回答
3

这对我来说非常有效,因为我想要一个对象数组列表:

List<MyObject> myList = new ArrayList<String>();
Cursor c = ...

while(c.moveToNext()) {
    myList.add(new MyObject(cursor.getInt(cursor.getColumnIndex("_id")), cursor.getString(cursor.getColumnIndex("column1")), cursor.getInt(cursor.getColumnIndex("column2")));        
}
c.close();

只需制作一个 POJOMyObject并确保它有一个构造函数。

于 2015-09-11T19:11:19.433 回答
2

在 Kotlin 中,你可以使用这个扩展:

fun <T> Cursor.toList(block: (Cursor) -> T) : List<T> {
    return mutableListOf<T>().also { list ->
        if (moveToFirst()) {
            do {
                list.add(block.invoke(this))
            } while (moveToNext())
        }
    }
}

并使用它:

val listOfIds = cursor.toList { 
    // create item from cursor. For example get id:
    it.getLong(it.getColumnIndex("_id"))
}
于 2018-07-17T09:45:57.350 回答