如何使用光标数据创建列表数组(滚动时列表显示第一个字母)?
问问题
69281 次
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 回答