如何在Android中使用光标数据创建列表数组

Den*_*nie 35 android arraylist android-cursor android-sqlite

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

Isa*_*ler 67

浏览中的每个元素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));
}
Run Code Online (Sandbox Code Playgroud)

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

  • 朋友:上面的for循环不完全正确(条件和增量交换).使用`for(mCursor.moveToFirst();!mCursor.isAfterLast(); mCursor.moveToNext()){}` (9认同)
  • 这种类型的循环有点难以阅读.@PearsonArtPhoto的解决方案更优雅,更易于阅读. (2认同)

imb*_*izi 40

一个快速更正:上面的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();
}
Run Code Online (Sandbox Code Playgroud)

  • 非常好点imbrizi.这是循环Cursor元素的更好方法 (3认同)

Pea*_*oto 22

甚至比@ imbrizi更好的答案是:

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

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
}
Run Code Online (Sandbox Code Playgroud)

  • 迭代Cursor的唯一正确方法.其他两个答案只是....错误:| (2认同)