1

我正在使用两个 SimpleCursorAdapter 在我的 Listview 中连续显示文本和图像。问题是当两次调用这些适配器时,它们会相互冲突。最后,我的 Listview 只显示了我最后调用的 SimpleCursorAdapter 的数据。

我需要做的是合并这两个 SimpleCursorAdapter,尽管它们使用不同的 sql 数据库。

有什么想法可以解决这个问题??

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.reminder_list);
    mDbHelper = new RemindersDbAdapter(this);
    mImageHelper = new ImageAdapter(this);
    mDbHelper.open();
    mImageHelper.open();
    fillData();
    fillImages();
    registerForContextMenu(getListView());
}

//
// Fills the ListView with the data from the SQLite Database.
//
private void fillData() {
    Cursor remindersCursor = mDbHelper.fetchAllReminders();
    startManagingCursor(remindersCursor);

    // Creates an array with the task title.
    String[] from = new String[] {RemindersDbAdapter.KEY_TITLE, RemindersDbAdapter.KEY_BODY};

    // Creates an array for the text.
    int[] to = new int[] {R.id.text1, R.id.text2};

    // SimpleCursorAdapter which is displayed.
    SimpleCursorAdapter reminders = new SimpleCursorAdapter(this, R.layout.reminder_row, remindersCursor, from, to);
    setListAdapter(reminders);

}

//
// Fills the ListView with the images from the SQLite Database.
//
private void fillImages() {
    Cursor imageCursor = mImageHelper.fetchAllImages();
    startManagingCursor(imageCursor);

    // Creates an array with the image path.
    String[] fromImage = new String[] {ImageAdapter.KEY_IMAGE};

    // Creates an array for the text.
    int[] toImage = new int[] {R.id.icon};

    // SimpleCursorAdapter which is displayed.
    SimpleCursorAdapter images = new SimpleCursorAdapter(this, R.layout.reminder_row, imageCursor, fromImage, toImage);
    setListAdapter(images);
}
4

3 回答 3

2

您可以使用MergeCursor类将多个单独的游标公开为单个游标。由于您的适配器绑定不同的列-> 小部件,您可能必须编写自己的 SimpleCursorAdapter 子类(或只是 CursorAdapter),以便您可以根据行执行正确类型的绑定。

于 2012-06-01T19:10:54.760 回答
0

如何创建自己的适配器(扩展 BaseAdapter),每次需要时都指向正确的数据?通过这种方式,您可以完全控制显示每个项目的时间和地点。

您甚至可以使用 2 个适配器并将它们用于新适配器。

于 2012-06-01T19:17:24.027 回答
0

我需要做的是合并这两个 SimpleCursorAdapter,尽管它们使用不同的 sql 数据库。

如果两个适配器确实不同(例如,不同的行布局),请使用myMergeAdapter将两个现有适配器合并为一个,然后MergeAdapterListView.

但是,在您的情况下,您似乎只是有两个Cursors内容不同,在这种情况下,superfell 的使用答案MergeCursor可能是更好的方法。

于 2012-06-01T19:19:51.907 回答