1

リストビューにテキストと画像を連続して表示するために、2 つの SimpleCursorAdapter を使用しています。問題は、これらのアダプタを 2 回呼び出すと、互いに競合することです。最終的に、リストビューには、最後に呼び出した SimpleCursorAdapter のデータのみが表示されます。

私がする必要があるのは、これら 2 つの 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クラスを使用して、多数の個々のカーソルを 1 つのカーソルとして公開できます。アダプターがさまざまな列 -> ウィジェットをバインドするため、SimpleCursorAdapter (または CursorAdapter のみ) の独自のサブクラスを記述して、行に応じて正しい種類のバインドを実行できるようにする必要がある場合があります。

于 2012-06-01T19:10:54.760 に答える
0

必要なたびに正しいデータを指す独自のアダプター(BaseAdapterを拡張)を作成するのはどうですか?このようにして、各アイテムをいつどこに表示するかを完全に制御できます。

2つのアダプターを使用して、新しいアダプターに使用することもできます。

于 2012-06-01T19:17:24.027 に答える
0

私がする必要があるのは、これら 2 つの SimpleCursorAdapter をマージすることですが、それらは異なる SQL データベースを使用しています。

2 つのアダプターがまったく異なる場合 (たとえば、行のレイアウトが異なる場合)、myMergeAdapterを使用して 2 つの既存のアダプターを 1 つに結合してから、MergeAdapterListView.

ただし、あなたの場合、コンテンツが異なる2つがあるだけのように見えます。その場合、Cursors使用するスーパーフェルの答えMergeCursorはおそらくより良いアプローチです.

于 2012-06-01T19:19:51.907 に答える