Android - 在ListView中显示DB的光标结果

时间:2012-11-13 19:52:28

标签: android android-listview simplecursoradapter android-cursoradapter

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

每行应该有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>

1 个答案:

答案 0 :(得分:4)

啊,带有CursorAdapter的ListView再次出现!第一次参加比赛并不容易,所以:

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

activity_display_cursor.xml布局定义了ListView。

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