2011-07-13 71 views
0

1分的結果所以,我終於得到了我的列表視圖,從我的數據庫查詢結果顯示(一個或多個),但由於某種原因它只顯示1,最後一次。setListAdapter只顯示來自查詢

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); 
} 

可能有人讓我知道我做錯了嗎?爲什麼它不顯示數據庫中的每一行?

編輯:這裏是我的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"/> 

NEW(正確方法):

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() 
} 

} 

回答

0

更換每次列表適配器通過循環。事實上,你根本不需要循環查看結果;改爲使用SimpleCursorAdapter。有關如何使用示例代碼,請參見herehere

+0

謝謝泰德,在此行中我要怎樣才能讓自己的數據庫的URI? (我用什麼代替People.Content_URI 光標光標= getContentResolver()查詢(People.CONTENT_URI,新的String [] {People._ID,People.NAME,People.NUMBER},NULL,NULL,NULL);? – LoveAndroid

1

的問題是在do while循環。您目前正在重新創建該數組並每次填充一個元素。所以最後一個是唯一顯示的(其餘被覆蓋)。你應該從do while循環中實例化數組,然後在循環中填充它,最後將它附加到列表視圖。

在一個側面說明,我一般使用的ArrayList創建自己的內容,因爲這樣我就不需要確定多大實例化數組時,它會。 Arraylist有一個方法.toArray。這將把它變成一個陣列給你。

+0

謝謝你Pyrodante的建議我現在明白我的問題,但我怎麼能實例化陣列出while循環? – LoveAndroid

+0

我這樣做該做的,但我得到了一些錯誤logcat中現在 如果(c.moveToFirst()) \t { \t \t串[]的ListData =新的String [70]; \t做{ \t INT I = 0; \t的ListData [I] = c.getString(0); \t我++; \t} \t while(c.moveToNext()); \t this.setListAdapter ... \t} – LoveAndroid

+0

如果您選擇僅使用數組,您可以定義它 String [] listData = new String [c.getCount]; 這應該使數組成爲所需的大小。 – Pyrodante