Android 使用MergeCursor和SimpleCursorAdapter,什么';她失踪了?

Android 使用MergeCursor和SimpleCursorAdapter,什么';她失踪了?,android,listview,simplecursoradapter,mergecursor,Android,Listview,Simplecursoradapter,Mergecursor,无论我做什么,下面都会抛出一个错误,即游标中包含的一列不存在。当我检查merge_光标时,我可以在那里找到列,这是我的代码,我做错了什么 cursor_invoices = Invoices.getInvoicesCursor(counterparty.getId()); Cursor cursor_counterparty = Counterparties .getCounterpartyCursor(counterparty.getId()); sta

无论我做什么,下面都会抛出一个错误,即游标中包含的一列不存在。当我检查merge_光标时,我可以在那里找到列,这是我的代码,我做错了什么

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:列“交易对手名称”不存在

当我调试应用程序时,我可以在合并游标的其中一个游标中看到“交易对手名称”列


任何帮助都会很好,谢谢

要垂直(添加行)还是水平(添加列)连接光标

这是理论,因为我没有偷看代码,但对我来说是有意义的

MergeCursor一个接一个地垂直连接光标(事实)。因此,对于光标的一部分,您有一组列,而对于另一部分,您有一组不同的列(假设)

您的适配器正在尝试为正在显示的行查找一个部分或另一部分中不存在的列

如果您更改为连接列的CursorJoiner,我认为它会更像您预期的那样工作,尽管我不知道如何正确排列行

很好的解释

编辑

我看到您使用相同的ID来获取每个游标,因此我对排列它们的关注是无关紧要的。我想你想要的是CursorJoiner而不是MergeCursor