studio ordenar llenar example eventos desplegable crear control con java android matrixcursor

java - ordenar - llenar listview con arraylist android



Uso de MatrixCursor y SimpleCursorAdapter en un ListView con texto e imágenes (1)

Tengo un problema al utilizar un MatrixCursor para completar mi 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); }

La construcción del SimpleCursorAdapter provoca un bloqueo. Incluso cuando intenté quitar el ícono, la aplicación aún fallaba. Aquí está mi 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>

Editar: Aquí está la pila de llamadas en el momento del bloqueo:

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]

SOLUCIÓN:

Encontré el problema y la solución está en mi respuesta a continuación.


Asignemos esto a la inexperiencia con la depuración de Java usando Eclipse.

Al ejecutar la aplicación en el depurador, me estrellé con una excepción RuntimeException. Al hacer clic en el elemento superior de la pila de llamadas, me dieron la lista de variables, en la que vi mi excepción e.

El error específico fue un InvalidArgument porque mi MatrixCursor no tenía una columna _id. Agregar una columna etiquetada _id solucionó el problema y ahora todo funciona.

¡Gracias por hacerme ver al depurador otra vez! ¡Siéntete cómodo y conocedor de tus herramientas!