Выяснить, как разделять список, пинает мою задницу прямо сейчас. Я видел код для sectioned-list-adapter здесь: ListView with scrolling/fixed header rows, и это может быть в конечном итоге то, что я хочу, но, возможно, есть лучший способ.Динамически создайте listview с заголовками строк за каждый месяц
Вот требования, которые мне нужны:
- данных для ListView должен поступать из базы данных SQLite (см ниже код для сервировки стола)
- Данные должны быть сгруппированы по месяцам (бонусные баллы за месяц/год)
- строка заголовка должна содержать количество элементов, записанных в базе данных для этого месяца
- должен быть совместимы с API 8+
- должен быть в состоянии щелкнуть элемент, чтобы открыть диск OG, содержащий шаги, выполняемые в тот же день (я уже знаю, как это сделать, когда я могу получить список созданных)
Глядя на seperatedListAdapter Джеффа Snarkey здесь: http://jsharkey.org/blog/2008/08/18/separating-lists-with-headers-in-android-09/ я смог придумать следующее:
datasource = new SmashDataSource(this);
datasource.open();
BJJHistory = (ListView) findViewById(R.id.ListHistory);
// create our list and custom adapter
adapter = new SeparatedListAdapter(this);
HistoryBJJ = datasource.getBJJHistory();
// THE DESIRED COLUMNS TO BE BOUND
final String[] columns = new String[] { SQLiteHelper.DATE };
// THE XML DEFINED VIEWS WHICH THE DATA WILL BE BOUND TO
final int[] to = new int[] { R.id.list_item_title };
if (HistoryBJJ != null) {
adapter.addSection("October", new SimpleCursorAdapter(this, R.layout.list_item,
HistoryBJJ, columns, to));
}
BJJHistory.setAdapter(adapter);
при этом используется следующий курсор, чтобы вытащить данные из базы данных SQLite в порядке убывания:
public Cursor getBJJHistory() {
final String[] columns = { SQLiteHelper.COLUMN_ID, SQLiteHelper.DATE };
final Cursor History;
History = database.query(SQLiteHelper.TABLE_BJJ, columns, null, null, null, null,
SQLiteHelper.DATE + " DESC");
return History;
}
Это приводит к следующему:
Это хорошо для начала, но представляет меня две проблемы:
- Как динамически населяют значение «Заголовок» с месяца? Я подумал об использовании курсора для заполнения массива со списком месяцев (после форматирования их с помощью SimpleDateFormat), затем выполнив цикл For Each, чтобы пройти через каждый, передав месяц назад методу курсора, чтобы вытащить все записи с значением даты и времени в этом месяце.
- Как отобразить результаты в строке как количество записей за этот день? В идеале хотелось бы что-то вроде этого:
Ответ на # 2 достаточно несколько просто, просто поставить два TextViews в макете строк списке следует, что более сложным является, как группировать все строки в базе данных для каждого дня или, по крайней мере, делать подсчет для каждого дня и использовать этот счет для отображения в списке.
Для первого, возвращаясь к примеру код здесь: http://code.google.com/p/android-section-list/ вместо примера массива при условии, я думаю, я мог бы изменить следующим образом:
SectionListItem[] exampleArray = { // Comment to prevent re-format
new SectionListItem("Test 1 - A", "A"), //
new SectionListItem("Test 2 - A", "A"), //
new SectionListItem("Test 3 - A", "A"), //
new SectionListItem("Test 4 - A", "A"), //
new SectionListItem("Test 5 - A", "A"), //
new SectionListItem("Test 6 - B", "B"), //
new SectionListItem("Test 7 - B", "B"), //
new SectionListItem("Test 8 - B", "B"), //
new SectionListItem("Test 9 - Long", "Long section"), //
new SectionListItem("Test 10 - Long", "Long section"), //
new SectionListItem("Test 11 - Long", "Long section"), //
new SectionListItem("Test 12 - Long", "Long section"), //
new SectionListItem("Test 13 - Long", "Long section"), //
new SectionListItem("Test 14 - A again", "A"), //
new SectionListItem("Test 15 - A again", "A"), //
new SectionListItem("Test 16 - A again", "A"), //
new SectionListItem("Test 17 - B again", "B"), //
new SectionListItem("Test 18 - B again", "B"), //
new SectionListItem("Test 19 - B again", "B"), //
new SectionListItem("Test 20 - B again", "B"), //
new SectionListItem("Test 21 - B again", "B"), //
new SectionListItem("Test 22 - B again", "B"), //
new SectionListItem("Test 23 - C", "C"), //
new SectionListItem("Test 24 - C", "C"), //
new SectionListItem("Test 25 - C", "C"), //
new SectionListItem("Test 26 - C", "C"), //
и заменить, что с курсорами или что не необходимо было извлекать данные за днем, а вместо «А», «В», «С» заменить это на имя месяца.
Это довольно запутанным для меня, как я учусь до сих пор, я получил довольно много каждую часть этого приложения полностью, я просто не могу понять, как раздел данных в список
Как ссылка, это скриншот «CardioTrainer», приложение для тренировки, которое имеет пользовательский раздел, но в основном я пытаюсь дублировать, по крайней мере, в функции.
В таблице это исходит из выглядит следующим образом:
Прежде всего, я рекомендую не использовать чужой адаптер, если вам нужно настроить заголовки разделов. Не очень сложно реализовать разделы в списке. Мне просто нужно одно. Когда вы извлекаете курсор в базу данных для отображения, вы тянете все данные по порядку относительно времени? Что вы делаете, когда происходят изменения в этом году? Например, вы показываете разделы с июня по декабрь 2011 года, то что должно произойти, когда наступает дата с января 2012 года? –