我一直试图让我的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>
答案 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。