Использование MatrixCursor и SimpleCursorAdapter в ListView с текстом и изображениями

У меня возникла проблема с использованием MatrixCursor для заполнения моего ListView :

 private void fillData() { String[] menuCols = new String[] { "icon", "item", "price" }; int[] to = new int[] { R.id.icon, R.id.item, R.id.price }; MatrixCursor menuCursor = new MatrixCursor(menuCols); startManagingCursor(menuCursor); menuCursor.addRow(new Object[] { R.drawable.chicken_sandwich, "Chicken Sandwich", "$3.99" }); SimpleCursorAdapter menuItems = new SimpleCursorAdapter( this, R.layout.menu_row, menuCursor, menuCols, to); setListAdapter(menuItems); } 

Построение SimpleCursorAdapter вызывает сбой. Даже когда я попытался удалить значок, приложение все еще разбилось. Вот мой menu_row.xml :

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android"> <ImageView android:id="@+id/icon" android:layout_width="wrap_content" android:layout_height="wrap_content"> </ImageView> <TextView android:id="@+id/item" android:layout_width="wrap_content" android:layout_height="wrap_content"> </TextView> <TextView android:id="@+id/price" android:layout_width="wrap_content" android:layout_height="wrap_content"> </TextView> </LinearLayout> 

Изменить: Вот стек вызовов во время сбоя:

 Thread [<3> main] (Suspended (exception RuntimeException)) ActivityThread.performLaunchActivity(ActivityThread$ActivityRecord, Intent) line: 2481 ActivityThread.handleLaunchActivity(ActivityThread$ActivityRecord, Intent) line: 2497 ActivityThread.access$2200(ActivityThread, ActivityThread$ActivityRecord, Intent) line: 119 ActivityThread$H.handleMessage(Message) line: 1848 ActivityThread$H(Handler).dispatchMessage(Message) line: 99 Looper.loop() line: 123 ActivityThread.main(String[]) line: 4338 Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method] Method.invoke(Object, Object...) line: 521 ZygoteInit$MethodAndArgsCaller.run() line: 860 ZygoteInit.main(String[]) line: 618 NativeStart.main(String[]) line: not available [native method] 

РЕШЕНИЕ:

Я нашел проблему, и решение в моем ответе ниже.

Solutions Collecting From Web of "Использование MatrixCursor и SimpleCursorAdapter в ListView с текстом и изображениями"

Давайте сделаем это с точностью до неопытности с отладкой Java с помощью Eclipse.

Запустив приложение в отладчике, я разбился с помощью RuntimeException. Щелчок по самому верхнему элементу в стеке вызовов дал мне список переменных, в которых я увидел свое исключение e.

Конкретная ошибка была InvalidArgument, потому что у моего MatrixCursor не было столбца _id. Добавление столбца с меткой _id устраняет проблему, и теперь все работает.

Спасибо, что заставил меня снова взглянуть на отладчика! Будьте довольны и осведомлены о своих инструментах!