Я думаю, что вы, кажется, пытается заполнить ListView, в то время как ListView будет иметь другой формат для каждой строки/записи, причем это указал на адаптером.
Т.е. для заполнения списка необходимо, чтобы у вас был адаптер. Адаптер будет использовать XML-макет, который определяет каждую запись (строку), в дополнение к макету, содержащему ListView и активность.
Вот пример адаптера пользовательского курсора: - метод
package mjt.shopper;
import android.content.Context;
import android.database.Cursor;
import android.support.v4.content.ContextCompat;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CursorAdapter;
import android.widget.TextView;
/**
* Created by Mike092015 on 6/02/2016.
*/
class AislesCursorAdapter extends CursorAdapter {
public AislesCursorAdapter(Context context, Cursor cursor, int flags) {
super(context, cursor, 0);
}
@Override
public View getView(int position, View convertview, ViewGroup parent) {
View view = super.getView(position, convertview, parent);
Context context = view.getContext();
if (position % 2 == 0) {
view.setBackgroundColor(ContextCompat.getColor(context, R.color.colorlistviewroweven));
} else {
view.setBackgroundColor(ContextCompat.getColor(context, R.color.colorlistviewrowodd));
}
return view;
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
TextView textviewaisleid = (TextView) view.findViewById(R.id.aisle_id_entry);
TextView textviewaislename = (TextView) view.findViewById(R.id.aisle_name_entry);
TextView textviewaisleorder = (TextView) view.findViewById(R.id.aisle_order_entry);
TextView textviewaisleshopref = (TextView) view.findViewById(R.id.aisle_shopref_entry);
textviewaisleid.setText(cursor.getString(ShopperDBHelper.AISLES_COLUMN_ID_INDEX));
textviewaislename.setText(cursor.getString(ShopperDBHelper.AISLES_COLUMN_NAME_INDEX));
textviewaisleorder.setText(cursor.getString(ShopperDBHelper.AISLES_COLUMN_ORDER_INDEX));
textviewaisleshopref.setText(cursor.getString(ShopperDBHelper.AISLES_COLUMN_SHOP_INDEX));
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
return LayoutInflater.from(context).inflate(R.layout.activity_aisle_list_entry, parent, false);
}
}
GetView не имеет значения и может быть пропущен (в нем выше чередует цвета строк/записей).
Вам понадобится метод bindView, явно соответствующий вашим потребностям (первая половина получает просмотры, которые должны быть заполнены, вторая половина устанавливает представления, и вы можете заметить, что она похожа на часть вашего кода).
Вам также понадобится метод newView, который в основном устанавливает макет, который будет использоваться для каждой строки/записи ListView (т. Е. Следующий XML).
Примечание! ShopperDBHelper.AISLES_COLUMN _ ??? _ INDEX содержит индекс в курсоре
Вот пример XML (один используемый выше адаптер): -
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/standard_listview_row_padding_vertical"
android:paddingLeft="@dimen/standard_listview_row_padding_horizontal"
android:paddingRight="@dimen/standard_listview_row_padding_horizontal"
android:paddingTop="@dimen/standard_listview_row_padding_vertical"
tools:context=".AisleListEntryActivity">
<!-- Aisle ID 4 debugging -->
<TextView
android:id="@+id/aisle_id_entry"
android:layout_width="30sp"
android:layout_height="@dimen/rowheight"
android:textSize="@dimen/standard_listview_text_size"
android:visibility="visible"/>
<!-- Aisle Name -->
<TextView
android:id="@+id/aisle_name_entry"
android:layout_width="@dimen/ailsename_text_size"
android:layout_height="@dimen/rowheight"
android:textSize="@dimen/standard_listview_text_size"
android:textStyle="bold" />
<!-- Aisle Order-->
<TextView
android:id="@+id/aisle_order_entry"
android:layout_width="@dimen/ailseorder_text_size"
android:layout_height="@dimen/rowheight"
android:textSize="@dimen/standard_listview_text_size"/>
<!-- Aisle Shopref 4 debugging -->
<TextView
android:id="@+id/aisle_shopref_entry"
android:layout_width="50sp"
android:layout_height="@dimen/rowheight"
android:textSize="@dimen/standard_listview_text_size"
android:visibility="gone"/>
</LinearLayout>
Вот пример кода, который получает курсор и устанавливает ListView для использования адаптера (опять же, как используется выше), это было бы в вашей деятельности: -
Cursor aislescsr = shopperdb.getAislesPerShopAsCursor(csr.getInt(ShopperDBHelper.SHOPS_COLUMNN_ID_INDEX));
final ListView lv = (ListView) findViewById(R.id.aalbclv01);
AislesCursorAdapter aisleadapter = new AislesCursorAdapter(lv.getContext(), aislescsr, CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
currentaca = aisleadapter;
lv.setAdapter(aisleadapter);
Первая строка населяет курсор из базы данных. Вторая строка получает ListView, который будет заполнен данными из базы данных. Третья строка устанавливает курсор адаптера. Четвертая строка не имеет отношения к делу. Пятая строка связывает адаптер с ListView.
Существует SimpleCursorAdapter, но я никогда не использовал его, поэтому не могу рассказать вам об этом.
Дополнительно CursorAdapter ожидает там столбца с именем _id, поэтому вам, возможно, придется использовать AS _id.
вот пример, где у меня не было _id и использовать AS, чтобы установить его (см 3-я строка): -
SQLiteDatabase db = this.getReadableDatabase();
String sqlstr = " SELECT " + PRODUCTUSAGE_COLUMN_AISLEREF +
" AS _id, " +
PRODUCTUSAGE_COLUMN_PRODUCTREF + ", " +
PRODUCTUSAGE_COLUMN_COST + ", " +
PRODUCTUSAGE_COLUMN_BUYCOUNT + ", " +
PRODUCTUSAGE_COLUMN_FIRSTBUYDATE + ", " +
PRODUCTUSAGE_COLUMN_LATESTBUYDATE + ", " +
PRODUCTUSAGE_COLUMN_MINCOST +
" FROM " + PRODUCTUSAGE_TABLE_NAME +
" ORDER BY _id;";
return db.rawQuery(sqlstr, null);
Вы показываете данные в ListView? –
Вы не смогли включить код ListView в свой вопрос ... –