У меня есть код, который выполняет два запроса по базе данных и возвращает два объекта курсора. Есть ли способ, которым я могу объединить эти два курсора, чтобы все ListView
получали данные из обоих?
ListView с использованием двух указателей мыши?
Ответ 1
Здесь MergeCursor для этого (если нет способа присоединиться к таблицам).
Ответ 2
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);
}
Ответ 3
Вы также можете использовать cwac-merge.
cwac-merge: Предоставляет MergeAdapter, ListAdapter, который объединяет несколько Views или ListAdapters в один ListAdapter. Используйте это для раздела заголовки, смешивая несколько источников данные вместе и т.д.
Ответ 4
Отметьте MatrixCursor.
Возможно, это также поможет вам Android - Таблица базы данных Присоединиться