Используя MergeCursor и SimpleCursorAdapter, чего не хватает?
Независимо от того, что я делаю, следующее выдает ошибку, что один из столбцов, содержащихся в cursor_counterparty, не существует. Когда я проверил merge_cursor, я могу найти там столбец, вот мой код, что я делаю не так?
cursor_invoices = Invoices.getInvoicesCursor(counterparty.getId());
Cursor cursor_counterparty = Counterparties
.getCounterpartyCursor(counterparty.getId());
startManagingCursor(cursor_invoices);
startManagingCursor(cursor_counterparty);
/* Joins cursors akin to doing an SQL join */
MergeCursor merge_cursor = new MergeCursor(new Cursor[] {
cursor_invoices, cursor_counterparty });
merge_cursor.moveToFirst();
int[] listview_columns = new int[] { R.id.textview_invoice_number,
R.id.textview_counterparty_name, R.id.textview_amount,
R.id.textview_account_name, R.id.textview_invoice_date,
R.id.textview_date_paid };
String[] listview_fields = new String[] { App.INVOICENUMBER,
App.COUNTERPARTYNAME, counterparty_amount_field,
App.ACCOUNTNAME, App.INVOICEDATE, App.DATEPAID };
SimpleCursorAdapter cursor_adapter_invoices = new SimpleCursorAdapter(
this, R.layout.listview_invoice_item, merge_cursor,
listview_fields, listview_columns);
Я получаю ошибку:
java.lang.IllegalArgumentException: столбец 'counterparty_name' не существует
Когда я отлаживаю приложение, я вижу "counterparty_name" в виде столбца на одном из курсоров в merge_cursor.
Любая помощь будет отличной, спасибо!
1 ответ
Вы хотите соединить курсоры вертикально (добавление строк) или горизонтально (добавление столбцов)?
Это теория, поскольку я не заглядывал в код, но для меня это имеет смысл...
MergeCursor объединяет курсоры вертикально (факт), один за другим. Таким образом, для части курсора у вас есть один набор столбцов, а для другого у вас есть другой набор столбцов (предположим).
Ваш адаптер пытается найти столбец, который не существует ни в одной части, ни в другой для отображаемой строки.
Если бы вы изменили на CursorJoiner, который объединяет столбцы, я думаю, что это будет работать больше, чем вы ожидаете, хотя как вы правильно выстроите строки, я не знаю.
Хорошее объяснение здесь
РЕДАКТИРОВАТЬ
Я вижу, что вы используете один и тот же идентификатор для извлечения каждого курсора, поэтому мое беспокойство по поводу их выравнивания не имеет значения. Я думаю, что вы действительно хотите CursorJoiner, а не MergeCursor.