我有一长串从SQLite数据库检索的对象。为了简化,我们假设一个Event
对象具有属性Date
,Name
和Location
。可扩展ListView按年/月分组项目
我可以使用下面的列表适配器和从Date
分类数据库中获取Event
秒的时间Event
的ListView
秒。
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
派生的列表适配器的示例通常包括预定义的组和名称。我只有一大组物品,每个物品都含有(乔达时间)LocalDate
,基于此我可以添加可用于排序的计算属性YearMonth
。
我的第一个想法是将整个列表传递给适配器,并让适配器确定组,并在创建适配器时将项目分配给组。但恐怕以这种方式处理整个列表,在显示列表之前创建组并将项目分配给这些组,在已经对性能敏感的视图中将是一个代价高昂的过程。
我可以想象这是一个相当普遍的情况,并且有一个更加优雅的方法来解决它。最好的方法是什么?
你能添加代码为您的数据模型到的问题也。为什么不能在将数据放入ListView之前以正确的方式排序数据? – Darwind
是的,那是我现在的做法。我用棒棒糖和后来的某种方式开始工作。在旧设备上,列表仍然是空的。我将清理一些代码,并在短时间内将其添加到问题中。谢谢。 – jerry
我用当前的代码更新了问题。我希望这个片段能够显示出足够的关于数据模型的信息 - 尽量避免发布过多的代码。 – jerry