【发布时间】:2015-04-30 21:00:11
【问题描述】:
基本上,我想做什么:
- 一次由两个 ArrayList 提供的 listView,每个列表放在一个部分中
- 两个 ListView 在用户看来就像一个,所以如果您滚动到第一个 ListView 的末尾,您可以平滑地向下滚动到第二个 listView。
但我缺乏这样做的知识。
以下是我需要解决的问题的一些细节,以及我为什么要寻求上述解决方案。
我正在尝试在 android 中构建一个相当复杂的列表视图。它的数据目前存储在一个 ArrayList 中。每行的数据由一个自定义对象提供。我按日期对条目进行排序, 效果很好。我现在需要
- 将该表分成两部分,根据我的自定义对象提供的第二个日期是否在过去(所以基本上基于布尔值)
- 在自定义设计中在这两个部分之间添加分隔符
- 如果我的两个部分中的任何一个为空,我需要添加显示消息的对应占位符
这需要一个涉及两个列表的独奏,这样对条目进行排序和处理设计会更容易。
如果您问我尝试了什么:我已经通过将相关日期映射到未来来解决它,因此它们位于列表的顶部
Collections.sort(newsList, new Comparator<News>() {
@Override
public int compare(News p1, News p2) {
DateTime startDate = new DateTime(p2.getValidUntil());
DateTime endDate = new DateTime(p1.getValidUntil());
if(Util.isEntryRelevant(p1)){
endDate = endDate.plusDays(1000);
}
if(Util.isEntryRelevant(p2)){
startDate.plusDays(1000);
}
Minutes diff = Minutes.minutesBetween(endDate, startDate);
diff.getMinutes();
return diff.getMinutes();
}
});
这可能是我迄今为止编写的最狡猾的一段代码。我想到了更多的解决方法,但它们似乎都变得凌乱和不干净。
【问题讨论】:
-
为什么不创建一个自定义适配器(通过扩展 ArrayAdapter)来覆盖 getView 和 getCount?这将允许您从 getView 返回第一个列表和第二个列表,并在需要时包含分隔符或空内容。
-
我确实有一个自定义适配器,它覆盖了 getView 和 getCount。但是我如何让它为每个视图返回正确的列表项?这将导致类似 if(location>newsItems1.size())return newsItems2.get(location+newsItems); getItem中的等等
-
但这对我来说似乎不是一个干净的解决方案,或者这就是这样做的方法。
标签: java android listview android-listview arraylist