Android, привязывающий SQLite к GridView в Eclipse - PullRequest
1 голос
/ 28 октября 2011

Я сделал следующий код для извлечения данных из базы данных 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?

Ответы [ 2 ]

0 голосов
/ 07 ноября 2011

Создайте новый макет, который содержит textViews. Найдите макет, как показано в первой строке кода ниже, и прикрепите свои данные к списку просмотра. 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);
}
0 голосов
/ 28 октября 2011

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

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

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

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

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

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

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

 // 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 (). Это уведомит прикрепленный View о том, что данные были изменены, и он должен обновить себя.

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

Пользовательские CursorAdapters .

Спасибо.

...