Использование 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]
РЕШЕНИЕ:
Я нашел проблему, и решение в моем ответе ниже.
1 ответ
Давайте отнесем это к неопытности при отладке Java с помощью Eclipse.
Запустив приложение в отладчике, я рухнул с RuntimeException. Щелчок по самому верхнему элементу в стеке вызовов дал мне список переменных, в которых я увидел свое исключение e.
Конкретной ошибкой был InvalidArgument, потому что у моего MatrixCursor не было столбца _id. Добавление столбца с меткой _id устранило проблему, и теперь все работает.
Спасибо, что заставили меня снова посмотреть на отладчик! Будьте удобны и хорошо осведомлены о ваших инструментах!