4

我一直试图让我的光标在列表视图中正确显示。它在使用 toast 时正确显示,因此光标可以正确检索数据,但我无法使其以列表格式显示。

每行应为 6 列。

它只显示一行没有数据。我确信这是一个非常基本的问题。也许有人可以告诉我哪里出错了,我将不胜感激。

显示光标.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();
}   
}

行.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>
4

1 回答 1

4

啊,带 CursorAdapter 的 ListView 又来了!第一次摸索并不容易,所以:

您的大部分内容都是正确的,但是,您的 row.xml 需要为要显示的光标中的每一列包含一个视图。CursorAdapter 构造函数中的“layout”参数指定布局文件的 resID;这个文件描述了一行。在您的情况下,您可能需要一个包含 6 个 TextViews 的 RelativeLayout,一个用于构造函数的“to”参数中的每个 R.id 值。CursorAdapter 负责将游标列映射到“to”参数中的视图,这就是为什么这些数组的大小必须相同的原因。

activity_display_cursor.xml 布局定义了 ListView。

请注意,我不怎么使用 ListActivity。在常规 Activity 中使用适配器设置 ListView 很容易。此外,API 11 中不推荐使用 startManagingCursor。更好的选择是使用 android.support.v4.content.CursorLoader 和 android.support.v4.widget.SimpleCursorAdapter。

于 2012-11-13T21:24:56.383 回答