setListAdapter仅显示查询的1个结果

时间:2011-07-13 21:26:18

标签: android database listview

所以我终于让我的listview从我的db查询中显示结果,但由于某种原因它只显示1,最后一个。

public class PastGames extends ListActivity {

@Override

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //setContentView(R.layout.pastgames);



    DBAdapter db = new DBAdapter(this);

    db.open();
    Cursor c = db.getAllFinalscores();
    if (c.moveToFirst())
    {
        do {
            String[] listData = new String [] {"Date: " + c.getString(1) + "\n" +
                    "Strokes: " + c.getString(2) + "\n" + "Holes: " + c.getString(3)};
            this.setListAdapter(new ArrayAdapter<String>(this,
                    R.layout.pastgames, listData));
        }
        while (c.moveToNext());
    }
    db.close();


}
}

将对DBAdapter

//***RETRIEVES ALL THE FINALSCORES***//
public Cursor getAllFinalscores()
{
    return db.query(DATABASE_TABLE, new String[] {
            KEY_ROWID,
            KEY_DATE,
            KEY_FINALSCORE,
            KEY_HOLESPLAYED},
            null, null, null, null, null);
}

有人能让我知道我做错了什么吗?为什么不显示db中的每一行?

编辑:这是我的xml文件

<?xml version="1.0" encoding="utf-8"?>
<TextView 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@id/android:list"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="16sp"
    android:padding="10dp"/>

新(正确方式):

public class PastGames extends ListActivity {

@Override

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //setContentView(R.layout.pastgames);


    db.open();
    Cursor c = db.getAllFinalscores();
    String[] listData = new String[c.getCount()];
    if (c.moveToFirst())
    {
    do {

        listData[c.getPosition()] = "Date: " + c.getString(1) + "\n" +
            "Strokes: " + c.getString(2) + "\n" + "Holes: " + c.getString(3);
    }
        while (c.moveToNext());
        this.setListAdapter(new ArrayAdapter<String>(this,
            R.layout.pastgames, listData));
    }
    db.close()
}

}

2 个答案:

答案 0 :(得分:1)

问题出在Do While循环中。您当前正在重新创建数组并每次填充一个元素。所以最后一个是唯一显示的(其余的被覆盖)。你应该从do while循环中实例化数组,然后在循环中填充它,最后将它附加到列表视图中。

另外,我通常使用ArrayLists来创建我的内容,因为这样我不需要确定实例化数组时的大小。 Arraylist有一个方法.toArray。这会把它变成一个数组。

答案 1 :(得分:0)

每次循环都是替换列表适配器。事实上,你根本不需要自己循环结果;请改用SimpleCursorAdapter。有关如何使用的示例代码,请参阅herehere