Android에서 커서 데이터로 목록 배열을 만드는 방법
-
20-09-2019 - |
문제
커서 데이터를 사용하여 목록 배열(목록은 스크롤할 때 첫 번째 알파벳을 표시함)을 어떻게 만들 수 있습니까?
해결책
모든 요소를 살펴보세요. 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
커서에서 얻으려는 값의 열 인덱스를 사용합니다.)
다른 팁
하나의 빠른 수정 : 위의 루프는 커서의 첫 번째 요소를 건너 뜁니다. 첫 번째 요소를 포함하려면 다음을 사용하십시오.
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
}
나는 객체의 배열 목록을 원했기 때문에 나에게 정말 잘 작동했습니다.
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
그리고 그것이 생성자가 있는지 확인하십시오.
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"))
}
제휴하지 않습니다 StackOverflow