将db.query返回到列表视图(除非有更好的东西?)

时间:2011-06-12 22:06:06

标签: android sqlite layout

我的DBAdapter中有一个getAll,它应该从数据库中提取所有数据:

public Cursor getAllFinalscores()
{
    return db.query(DATABASE_TABLE, new String[] {
            KEY_ROWID,
            KEY_DATE,
            KEY_FINALSCORE,
            KEY_HOLESPLAYED},
            null, null, null, null, null);
}

而且现在,我已经拥有它,以便当用户想要查看所有数据时(来自主要活动),它将全部拉出来,如下所示:

public void DisplayFinalscore(Cursor c)
{
    Toast.makeText(this,
            "DATE: " + c.getString(1) + "\n" +
            "FINALSCORE: " + c.getString(2) + "\n" +
            "HOLESPLAYED: " + c.getString(3),
            Toast.LENGTH_LONG).show();
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    switch (item.getItemId()) {
        case R.id.past_games:
            DBAdapter db = new DBAdapter(this);

            db.open();
            Cursor c = db.getAllFinalscores();
            if (c.moveToFirst())
            {
                do {
                    DisplayFinalscore(c);
                }
                while (c.moveToNext());
            }
            db.close();

        }
    return true;
}

然而,这可以将它们全部显示为弹出的小消息。我希望将它们显示在单独屏幕上的列表中。

我创建了一个新类(PastGames),如下所示:

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();
        startManagingCursor(c);

        String[] from = new String[] { DBAdapter.KEY_DATE};
        int[] to = new int[] {R.id.text1};

        SimpleCursorAdapter games = new SimpleCursorAdapter(this, layout.pastgames_row, c, from, to);
        setListAdapter(games);
        db.close();
    }
}

我也有我的xml文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="wrap_content"
android:layout_height="wrap_content">

<ListView android:id="@id/android:list"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>
<TextView android:id="@id/android:empty"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/no_games"/>

和行布局

<TextView android:id="@+id/text1"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>

可以帮助我完成我需要做的工作,以便将这些信息纳入这些布局吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

好的,有些事情:

首先,要访问数据库,您应该使用SQLiteOpenHelper。它可以帮助您读/写它并创建/更新数据库。

此外,startManagingCursor() - 方法已弃用,不应再使用。如果您需要关闭光标,请手动执行。

不要在onCreate - 方法中打开数据库连接,因为它只在首次创建活动时调用。请改用onStart - 方法。另外,请勿使用onCreate - 方法填充List。为此创建一个新方法,并在onStart - 方法中调用它。如果活动得到后盾并再次进行预设,则旧数据不会出现问题。

此外,如果您有ListActivity,则不需要包含ListView的布局。这是自动完成的。

这就是我目前所看到的一切。如果您收到任何错误或异常,请发布这些消息。看看这是否会让你更进一步。