Android – Visualización de los resultados del cursor de DB en ListView

He estado intentando conseguir mi cursor para exhibir correctamente en listview. Se muestra correctamente cuando se utiliza un brindis por lo que el cursor está recuperando los datos correctamente, pero estoy teniendo problemas para hacer que se muestre en formato de lista.

Debe haber 6 columnas en cada fila.

Sólo muestra una fila sin datos. Estoy seguro de que es un problema muy básico. Tal vez alguien podría decirme a dónde me equivoco, estaría agradecido.

DisplayCursor.Java

public class DisplayCursor extends ListActivity { MyDBManager db = new MyDBManager(this); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_display_cursor); db.open(); Cursor cursor = db.getAllRows(); startManagingCursor(cursor); String[] columns = new String[] { MyDBManager.KEY_DESCRIPTION, MyDBManager.KEY_PERCENTAGE, MyDBManager.KEY_PRICE, MyDBManager.KEY_VOLUME, MyDBManager.KEY_VFM, MyDBManager.KEY_QUANTITY }; int[] to = new int[] { R.id.description,R.id.perc,R.id.price,R.id.units,R.id.vol, R.id.vfm }; SimpleCursorAdapter mAdapter = new SimpleCursorAdapter(this, R.layout.row, cursor, columns, to); this.setListAdapter(mAdapter); db.close(); } } 

Row.xml

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:id="@+id/description" android:layout_width="140dp" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_marginTop="27dp" /> <TextView android:id="@+id/vol" android:layout_width="30dp" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/description" android:layout_alignBottom="@+id/description" android:layout_toRightOf="@+id/description" /> <TextView android:id="@+id/perc" android:layout_width="30dp" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/vol" android:layout_alignBottom="@+id/vol" android:layout_toRightOf="@+id/vol" /> <TextView android:id="@+id/price" android:layout_width="30dp" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/perc" android:layout_alignBottom="@+id/perc" android:layout_toRightOf="@+id/perc" /> <TextView android:id="@+id/units" android:layout_width="30dp" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/price" android:layout_alignBottom="@+id/price" android:layout_toRightOf="@+id/price" /> <TextView android:id="@+id/vfm" android:layout_width="80dp" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/units" android:layout_alignBottom="@+id/units" android:layout_toRightOf="@+id/units" /> </RelativeLayout> 

Activity_display_cursor.xml

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content"> <ListView android:id="@android:id/list" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <TextView android:id="@android:id/empty" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/nodata"/> </LinearLayout> 

Ah, ListView con CursorAdapter golpea de nuevo! No es fácil rondar la primera vez, así que:

Usted tiene la mayoría de lo correcto, sin embargo, su row.xml debe contener una vista para cada columna en el cursor que desea mostrar. El argumento "layout" en el constructor CursorAdapter especifica el resID de un archivo de diseño; Este archivo describe una fila . En su caso, probablemente desee un RelativeLayout que tenga 6 TextViews en él, uno para cada uno de los valores de R.id en el argumento "to" para el constructor. El CursorAdapter se encarga de asignar las columnas del cursor a las vistas en el argumento "to", por lo que el tamaño de esos arrays tiene que ser el mismo.

El layout activity_display_cursor.xml define el ListView.

Como nota, no uso ListActivity mucho. Es bastante fácil configurar un ListView con un adaptador en una actividad normal. Además, startManagingCursor fue obsoleto en API 11. Una mejor opción es usar android.support.v4.content.CursorLoader y android.support.v4.widget.SimpleCursorAdapter.

  • SimpleCursorAdapter de Android con consultas utilizando DISTINCT
  • Android: ¿Cómo poner un archivo de imagen de la tarjeta SD a HashMap con simpleadapter?
  • Utilizar SimpleCursorAdapter.ViewBinder para cambiar el color de TextView
  • Los métodos onCreateViewHolder y onBindViewHolder de RecyclerView.Adapter no se reciben
  • ¿Cómo actualizar ListView en ListFragment de FragmentActivity?
  • Cómo actualizar la lista con el adaptador Cursor
  • Obtener el valor String de un Spinner respaldado por CursorAdapter de la consulta SQL en Android
  • Actualización de Android ListView con SimpleCursorAdapter
  • Enfoque para rellenar la vista de lista expandible con la base de datos SQlite local
  • Conversión de un ArrayAdapter a CursorAdapter para su uso en un SearchView
  • ¿Usando SimpleCursorAdapter con Spinner?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.