У меня есть длинный список объектов, которые я извлекаю из базы данных SQLite. Для упрощения предположим, что объект Event
имеет свойства Date
, Name
и Location
.Расширяемые элементы списка ListView по годам/месяцам
я могу иметь хронологические ListView
из Event
сек, используя следующий список адаптер и выборку Event
сек из базы данных отсортированных по Date
.
public class ImageListButtonListAdapter extends ArrayAdapter<ImageListButtonListItem> {
public ImageListButtonListAdapter(Context c, List<ImageListButtonListItem> items) {
super(c, 0, items);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageListButtonView itemView = (ImageListButtonView)convertView;
if (null == itemView)
itemView = ImageListButtonView.inflate(parent);
itemView.setItem(getItem(position));
return itemView;
}
@Override
public void notifyDataSetChanged() {
super.notifyDataSetChanged();
}
}
Пока что так хорошо. Теперь этот список очень длинный, и я хочу продолжить структурирование списка с помощью ExpandableListView
и группировать Event
по месяцам. Я обнаружил, что создание адаптера списка, полученного из BaseExpandableListAdapter
, обычно включает в себя предопределенные группы и имена групп. У меня просто одна большая группа элементов, каждая из которых содержит (Joda Time) LocalDate
, на основе которой я могу добавить вычисленное свойство YearMonth
, которое может быть использовано для сортировки.
Моя первая мысль состояла в том, чтобы передать весь список адаптеру и дать адаптеру определить группы и назначить элементы для групп при создании адаптера. Но я боюсь, что обработка всего списка таким образом, создание групп и назначение элементов этим группам до того, как список будет показан, будет дорогостоящим процессом в уже настроенном для производительности представлении.
Я могу представить, что это довольно распространенный сценарий, и что есть более элегантный способ его решения. Какой был бы лучший подход?
Не могли бы вы добавить код для DataModel в вопрос также. Почему вы не можете правильно упорядочить свои данные перед тем, как поместить их в свой «ListView»? – Darwind
Да, это был мой подход. И я получил его как-то работать с Lollipop и позже. На старых устройствах список по-прежнему пуст. Я очищу код и добавлю его на вопрос в ближайшее время. Благодарю. – jerry
Я обновил вопрос с помощью текущего кода. Надеюсь, что фрагмент выявит достаточную информацию о модели данных - попытка избежать чрезмерного количества кода. – jerry