2014-11-19 3 views
0

Я пытаюсь загрузить Adapter из базы данных SQLite, и я не могу представить, как это работает. Я чрезвычайно новичок в программировании на Android и Java, поэтому прощайте, если я споткнулся о некоторых из очевидных.Загрузка адаптера ListView в Android

Я понимаю, что для «правильной» настройки базы данных у меня должны быть 3 java-файла, Main, DatabaseHandler и класс для любой моей таблицы, поэтому добираемся туда. У меня большая часть работы в какой-то форме, но я не могу заставить ListView загружать строки в моей таблице.

У меня есть только одна таблица с двумя столбцами, идентификатором и изделием. Код в DatabaseHandler, чтобы получить все детали показано ниже:

public List<Item> getAllItems() 
{ 
    List<Item> itemList = new ArrayList<Item>(); 
    String selectQuery = "SELECT * FROM " + TABLE_ITEMS; 
    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor cursor = db.rawQuery(selectQuery, null); 

    if (cursor.moveToFirst()) 
    { 
     do { 
      Item item = new Item(); 
      item.setID(Integer.parseInt(cursor.getString(0))); 
      item.setItem(cursor.getString(1)); 
      itemList.add(item); 
     } while (cursor.moveToNext()); 
    } 
    return itemList; 
} 

Как делать положить, что в ListView Adapter в основной деятельности? Это то, что я пробовал ниже, и это не сработало. Вместо этого я получил указательные позиции:

List itemArray = db.getAllItems(); 
    //Define a new Adapter 
    ArrayAdapter<List> adapter = new ArrayAdapter<List>(this, 
      android.R.layout.simple_list_item_1, android.R.id.text1, itemArray); 

    //Bind the adapter to the listView 
    itemView.setAdapter(adapter); 

Как загрузить элементы?

Спасибо за предоставленную помощь.

Socaprice

ответ

2

Вы можете использовать SimpleCursorAdapter здесь. Вам не придется ничего разбирать самостоятельно, и вам не понадобится настраиваемый адаптер.

Сначала настройте свой метод DB для возврата Cursor:

public Cursor getData() { 
    String selectQuery = "SELECT * FROM " + TABLE_ITEMS; 
    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor cursor = db.rawQuery(selectQuery, null); 

    return cursor; 
} 

Следующая создать и установить SimpleCursorAdapter:

Cursor cursor = db.getData(); 
String[] from = new String[] { "StringColumn" }; 
int[] to = new int[] { android.R.id.text1 }; 

SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, 
     android.R.layout.simple_list_item_1, cursor, from, to, 0); 

listView.setAdapter(adapter); 

Примечание: Изменение "StringColumn" на имя БД столбца, который будет использоваться.

Edit: Вы можете получить имена столбцов впоследствии так:

String itemColumn = cursor.getColumnName(1); 

И затем использовать его для SimpleCursorAdapter:

String[] from = new String[] { itemColumn }; 
+0

Извините, что не получилось, получение и ошибка в журнале: java.lang.IllegalArgumentException: column '_id' не существует. Заменил «StringColumn» на «item», так как это заголовок нужного столбца, но это приводит к сбою приложения и отображает ошибку, о которой я упоминал выше. – Socaprice

+0

@Socaprice Я обновил свой ответ, чтобы помочь вам получить значения по индексу столбца. – Simas

+0

Извините за то, что я так незнаю, так как я новичок в Android/Java, но где я размещаю код «String itemColumn = queryResult.getColumn (1)»? Я предполагаю, что это должно быть в коде, где я создаю адаптер, но я получаю сообщение об ошибке «не может разрешить символ queryResult». – Socaprice

0

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

This - отличное место для начала.

Но, чтобы дать вам общее представление об этом (и как я не оправдываю ответа на SO вопрос, только давая ссылки) ваш ArrayAdapter будет работать так:

  • Сделать XML макет для вашего ListView пункт. Tis coul может быть простым TextView или сложным, составным View.
  • Передайте ваш List<Item> адаптеру и сохраните его как глобальную переменную (или поле).
  • Override ArrayAdapter «s getView(), чтобы привязать s Button s вы можете иметь в макете XML, определенной выше, с фактическими данными из вашего List<Item>TextView. Android автоматически вызывает этот метод, передавая фактическую позицию, чтобы вы могли вызвать соответствующий элемент в своем списке.
+0

Не уверен, что я понимаю, так как я имею вопросы, проходящие Список в первую очередь. Плюс, так как я очень новичок в этом, мне придется пойти по ссылке, которую вы разместили, и посмотреть, могу ли я понять, что вы пытаетесь мне сказать здесь. - У меня уже возникли проблемы с пониманием того, как настроить обработчик базы данных и класс для соответствия таблице в базе данных и т. Д. :-) – Socaprice

0

Вы должны написать свой собственный ArrayAdapter. Потому что нормальный ArrayAdapter не знает ваш предмет, поэтому он ничего не может с этим поделать.

См Custom Array Adapter example/tutorial

+0

Должен проверить ссылку, которую вы опубликовали, поскольку я не знаю, как написать собственный ArrayAdapter. .. к сожалению ... :-) вовремя. – Socaprice

Смежные вопросы