2011-06-12 27 views
0

我有我将对DBAdapter,一个GETALL应该把所有的数据从数据库中:回报db.query到listeview(除非那里有更好的东西?)

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"/> 

可以帮我解决我需要做的事情,以便将这些信息放入这些布局中?

谢谢!

回答

0

好了,几件事情:

首先,访问数据库,你应该使用SQLiteOpenHelper。它可以帮助您读/写并创建/更新数据库。另外,startManagingCursor()-方法已被弃用,不应再使用。如果您需要关闭光标,请手动执行。

请勿在onCreate-方法中打开数据库连接,因为只有在首次创建活动时才调用它。改为使用onStart-方法。另外,请勿使用onCreate-方法来填充列表。为此创建一个新方法,并在onStart-方法中调用它。如果活动再次背景并再次预先登场,则旧数据不会出现问题。

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

这就是我所看到的那一刻。如果您遇到任何错误或异常情况,请发布这些消息。看看这是否让你更进一步。

+0

因此,我在PastGames活动中创建了一个新的onStart(Cursor c),但我仍不清楚如何从主要活动中获取该开始。 – Rob 2011-06-12 22:33:26

+0

你不应该创建一个'onStart(Cursor c)' - 方法。你应该看看[Activity-Lifecyrcle](http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle) – 2011-06-12 23:03:34

+0

我想我明白现在发生了什么。所以现在我从数据库中提取所有正常工作的数据,然后通过Toast.makeText运行它的每一行......我想我只是想了解如何使这个列表而不是敬酒。 – Rob 2011-06-12 23:23:54