setListAdapter показывает только 1 результат запроса - PullRequest
0 голосов
/ 14 июля 2011

Итак, я наконец-то получил мой просмотр списка для отображения результатов из моего запроса к БД, но по какой-то причине он показывает только 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);
}

Может ли кто-нибудь дать мне знать, что я делаю не так? Почему он не отображает каждую строку в БД?

РЕДАКТИРОВАТЬ: Вот мой 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()
}

}

Ответы [ 2 ]

1 голос
/ 14 июля 2011

Проблема в цикле Do While. В настоящее время вы воссоздаете массив и каждый раз заполняете его одним элементом. Таким образом, отображается только последний (остальные были перезаписаны). Вы должны создать экземпляр массива из цикла do while, затем заполнить его внутри цикла и, наконец, присоединить его к представлению списка.

Кстати, я обычно использую ArrayLists для создания своего контента, потому что таким образом мне не нужно определять, насколько большим он будет при создании экземпляра массива. Arraylist имеет метод .toArray. это превратит его в массив для вас.

0 голосов
/ 14 июля 2011

Вы заменяете свой список адаптеров каждый раз в цикле.на самом деле вам вообще не нужно самим просматривать результаты;используйте взамен SimpleCursorAdapter .См. здесь и здесь для примера кода о том, как его использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...