Frage

Wie kann ich eine Liste Array (die Listenanzeige Alphabet, wenn Scroll) mit den Cursor Daten an?

War es hilfreich?

Lösung

Gehen Sie durch jedes Element in der Cursor, und fügen Sie sie eins nach dem anderen auf die 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));
}

(ersetzen WhateverTypeYouWant mit welcher Art auch immer Sie wollen eine ArrayList von und WHATEVER_COLUMN_INDEX_YOU_WANT mit dem Spaltenindex des Wertes Sie vom Cursor bekommen machen.)

Andere Tipps

Eine schnelle Korrektur: die for-Schleife oben überspringt das erste Element des Cursors. Um auch das erste Element, verwenden Sie diese:

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

Noch besser als @ imbrizi Antwort der ist dies:

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

moveToNext() wird falsch zurück, wenn es nichts ist links, so dass dies die SLOC von wenige reduziert, und ist leichter zu sehen.

Noch besser ist es, den Spaltenindex außerhalb der Schleife zu erhalten.

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

Dies funktionierte wirklich gut für mich, weil ich eine Arraylist von Objekten gesucht:

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

Nur eine POJO MyObject machen und stellen Sie sicher, es hat einen Konstruktor.

In Kotlin Sie diese Erweiterung verwenden können:

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

und verwenden es:

val listOfIds = cursor.toList { 
    // create item from cursor. For example get id:
    it.getLong(it.getColumnIndex("_id"))
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top