Android – отображение результатов курсора из базы данных в ListView

Я пытаюсь правильно отобразить курсор в списке. Он правильно отображается при использовании тоста, поэтому курсор правильно извлекает данные, но у меня возникают проблемы с его отображением в формате списка.

Должно быть 6 столбцов в каждой строке.

Он отображает только одну строку без данных. Я уверен, что это очень простая проблема. Может быть, кто-нибудь может сказать мне, где я ошибаюсь, я был бы благодарен.

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> 

Ах, ListView с CursorAdapter снова ударит! Непросто перенести первый раз, так что:

У вас есть большая часть исправлений, однако ваш row.xml должен содержать представление для каждого столбца в курсоре, который вы хотите отобразить. Аргумент «макет» в конструкторе CursorAdapter задает resID файла макета; Этот файл описывает одну строку . В вашем случае вы, вероятно, захотите RelativeLayout, в котором есть 6 TextViews, по одному для каждого из значений R.id в аргументе «to» для конструктора. CursorAdapter заботится о сопоставлении столбцов курсора с представлениями в аргументе «to», поэтому размер этих массивов должен быть одинаковым.

Макет activity_display_cursor.xml определяет ListView.

В качестве примечания я не пользуюсь ListActivity. Достаточно легко настроить ListView с адаптером в обычном Activity. Кроме того, startManagingCursor устарел в API 11. Лучшим вариантом является использование android.support.v4.content.CursorLoader и android.support.v4.widget.SimpleCursorAdapter.