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

有帮助吗?

解决方案

转到穿过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。)

其他提示

一个快速校正: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();
}

甚至比@ 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
}

这一个工作非常适合我,因为我想对象的ArrayList:

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();

只是做一个POJO MyObject,并确保它有一个构造函数。

在科特林可以使用该扩展:

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"))
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top