Android привязывает SQLite к GridView в Eclipse

Я сделал следующий код для извлечения данных из базы данных SQLite.

public Cursor fetchAllScores() {
    return database.query(DATABASE_TABLE, new String[] { KEY_ROWID,
            KEY_PLAYDATE, KEY_NUMVALA, KEY_NUMVALB }, null, null, null,
            null, null);
}

Затем я вызываю эту функцию в своем файле main.java, используя следующее

cursor = dbHelper.fetchAllScores();
    startManagingCursor(cursor);

После того, как у меня есть курсор, мне удается заполнить myGridView некоторыми данными, используя следующий код

GridView myGV = (GridView)findViewById(R.id.gridView1);

    String[] cols = new String[] { scoreDbAdapter.KEY_PLAYDATE, scoreDbAdapter.KEY_NUMVALA, scoreDbAdapter.KEY_NUMVALB};
    int[]   views = new int[] { android.R.id.text1, android.R.id.text2, android.R.id.text2 };

    SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, 
            android.R.layout.simple_list_item_1, cursor, cols, views);

    Log.w("NumRows",adapter.getCount() + "");

    myGV.setAdapter(adapter);

Теперь проблема в том, что заполняется только первая строка и первые два столбца, мне нужны данные, как в первой строке (2011-10-27, 5, 6), и во второй строке, как (2011-10-26, 3, 2), но я получаю это только первая строка (2011-10-27, 2011-10-26).

Можно ли это исправить в GridView?


person Ali Exalter    schedule 28.10.2011    source источник


Ответы (2)


По вашему вопросу загляните сюда, Привязка к данным с помощью AdapterView.

Примечание. Ниже приведено описание лишь примера того, как привязать курсор к адаптеру.

Заполнение макета данными

Вставка данных в макет обычно выполняется путем привязки класса AdapterView к адаптеру, который извлекает данные из внешнего источника (возможно, список, предоставляемый кодом, или результаты запроса из базы данных устройства).

Следующий пример кода делает следующее:

1. Создает Spinner с существующим представлением и привязывает его к новому ArrayAdapter, который считывает массив цветов из локальных ресурсов.

2. Создает еще один объект Spinner из представления и привязывает его к новому SimpleCursorAdapter, который будет считывать имена людей из контактов устройства (см. Контакты. Люди).

 // Get a Spinner and bind it to an ArrayAdapter that 

 // references a String array.

Spinner s1 = (Spinner) findViewById(R.id.spinner1);

ArrayAdapter adapter = ArrayAdapter.createFromResource(    this, R.array.colors,
 android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

s1.setAdapter(adapter);

// Load a Spinner and bind it to a data query.
private static String[] PROJECTION = new String[] { People._ID, People.NAME};

Spinner s2 = (Spinner) findViewById(R.id.spinner2);
Cursor cur = managedQuery(People.CONTENT_URI, PROJECTION, null, null);

SimpleCursorAdapter adapter2 = new SimpleCursorAdapter(this,android.R.layout.simple_spinner_item,cur,new String[] {People.NAME}, new int[] {android.R.id.text1});

adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
s2.setAdapter(adapter2);

Обратите внимание, что необходимо, чтобы столбец People._ID в проекции использовался с CursorAdapter, иначе вы получите исключение.

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

Для получения дополнительной информации см. это,

Пользовательские адаптеры курсоров.

Спасибо.

person user370305    schedule 28.10.2011

Создайте новый макет, содержащий текстовые представления. Найдите макет, как показано в первой строке кода ниже, и прикрепите свои данные к listView. ListView загружает макет, содержащий textView.

private void populateGrid()
{

    ListView lv = (ListView)findViewById(R.id.listView1);

    Cursor c = dbHelper.fetchAllScores();
    startManagingCursor(cursor);

    String[] cols = new String[] { TodoDbAdapter.KEY_PLAYDATE, TodoDbAdapter.KEY_NUMVALA, TodoDbAdapter.KEY_NUMVALB};
    int[]   views = new int[] { R.id.txt_date, R.id.txt_no, R.id.txt_yes};

    // Now create an array adapter and set it to display using our row
    SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, 
            R.layout.listviewtemp, c, cols, views);

    Log.w("NumRows",adapter.getCount() + "");

    lv.setAdapter(adapter);

}

R.layout.listviewtemp — это макет шаблона listView (отдельный xml), lv — это список, найденный в mainlayout.xml.

public Cursor fetchAllScores() {
    return database.query(DATABASE_TABLE, new String[] { KEY_ROWID,
            KEY_PLAYDATE, KEY_NUMVALA, KEY_NUMVALB }, null, null, null,
            null, null);
}
person Ali Exalter    schedule 07.11.2011