вернуть db.query в listeview (разве есть что-то лучше?) - PullRequest
0 голосов
/ 13 июня 2011

В моем 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 голосов
/ 13 июня 2011

Хорошо, несколько вещей:

Во-первых, для доступа к базе данных вы должны использовать SQLiteOpenHelper . Он помогает вам читать / писать в него и создавать / обновлять базу данных.

Кроме того, метод startManagingCursor() устарел и больше не должен использоваться. Если вам нужно закрыть курсор, сделайте это вручную.

Не открывайте ваше соединение с БД в методе onCreate, так как оно вызывается только при первом создании Activity. Вместо этого используйте onStart -метод. Кроме того, не используйте onCreate -метод для заполнения списка. Создайте для этого новый метод и вызовите его также в методе onStart. Если задание снова станет задним и задним числом, проблем со старыми данными не будет.

Кроме того, если у вас есть ListActivity, вам не нужен макет, содержащий ListView. Это делается автоматически.

Это все, что я вижу на данный момент. Если вы получаете какие-либо ошибки или исключения, пожалуйста, публикуйте эти сообщения тоже. Посмотрим, получится ли это дальше.

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