我使用两个SimpleCursorAdapters在Listview中连续显示文本和图像。问题是,当两次调用这些适配器时,它们会相互冲突。最后,我的Listview只显示我最后调用的SimpleCursorAdapter的数据。
我需要做的是合并这两个SimpleCursorAdapters,尽管它们使用不同的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);
}
答案 0 :(得分:2)
您可以使用MergeCursor类将多个单独的游标公开为单个游标。当您的适配器绑定不同的列 - >小部件时,您可能必须编写自己的SimpleCursorAdapter子类(或只是CursorAdapter),以便您可以根据行执行正确的绑定类型。
答案 1 :(得分:0)
如何创建自己的适配器(扩展BaseAdapter),每次需要时指向正确的数据? 通过这种方式,您可以完全控制显示每个项目的时间和位置。
您甚至可以使用2个适配器并将它们用于新适配器。
答案 2 :(得分:0)
我需要做的是合并这两个SimpleCursorAdapters,尽管它们使用不同的sql数据库。
如果两个适配器确实不同(例如,不同的行布局),请使用my MergeAdapter
将两个现有适配器合并为一个,然后将MergeAdapter
与ListView
一起使用。< / p>
但是,在您的情况下,您似乎只有两个Cursors
具有不同的内容,在这种情况下,superfell使用MergeCursor
的答案可能是更好的方法。