ListView с использованием двух cursoradapters? - PullRequest
16 голосов
/ 13 июля 2010

У меня есть некоторый код, который выполняет два запроса к базе данных и возвращает два объекта курсора. Можно ли как-нибудь объединить эти два курсора, чтобы все ListView получали данные из обоих?

Ответы [ 4 ]

14 голосов
/ 13 июля 2010

Для этого есть MergeCursor (если нет возможности объединить таблицы).

9 голосов
/ 15 октября 2011

FYI - пример использования MergeCursor ()

c = Курсор, содержащий столбцы контактов из Contacts.CONTENT_URI

private Cursor mergeCursorSubset(Cursor c) {

    int userMobile = ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE,
        workMobile = ContactsContract.CommonDataKinds.Phone.TYPE_WORK_MOBILE;

    String storedNumber = ContactsContract.CommonDataKinds.Phone.NUMBER,
            displayName =ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
            numberType = ContactsContract.CommonDataKinds.Phone.TYPE,
            contactKey = ContactsContract.CommonDataKinds.Phone.LOOKUP_KEY,
            whereClausePre = contactKey+" = '",
            whereClausePost = "AND ("+numberType+" = '"+userMobile+"' OR "+numberType+" = '"+workMobile+"'";


    Uri lookupUri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;;

    Cursor [] m = new Cursor[c.getCount()]; 

    if (c.moveToFirst())
        for (int k = 0; k<c.getCount();k++){            
            //Find the mobile numbers
            Cursor u = this.getContentResolver().query(lookupUri,
                                                    new String[]{displayName, storedNumber, numberType}
                                                    , whereClausePre+c.getString(c.getColumnIndex(Contacts.LOOKUP_KEY))+"') " 
                                                        + whereClausePost, null, null);
            int i = 0;
            if (u.moveToFirst())
                m[i++] = u;

        } //for Each key

    return new MergeCursor(m);

}
4 голосов
/ 13 июля 2010

Вы также можете использовать cwac-merge .

cwac-merge: предоставляет адаптер слияния, ListAdapter, который смешивает несколько Представления или ListAdapters в одном ListAdapter. Используйте это для раздела заголовки, смешивая несколько источников данные вместе и т. д.

1 голос
/ 13 июля 2010

Оформить MatrixCursor .

Может быть, это поможет вам также Android - Присоединение к базе данных

...